Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Сравнение СУБД Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 8 9 10 11 12 13 14 [15] 16 17   вперед  Ctrl
 Re: А зачем нужен этот монстр....... MS SQL?  [new]
Pi
Member

Откуда:
Сообщений: 278
SergSuper
Да нет, скорее всего надо отключить рекурсивное выполнение триггеров


Thank you, it helps! В таком виде работает:
exec sp_dboption 'Orcl64','recursive triggers','false'
29 окт 04, 18:38    [1072372]     Ответить | Цитировать Сообщить модератору
 Re: А зачем нужен этот монстр....... MS SQL?  [new]
SergSuper
Member

Откуда: SPb
Сообщений: 5488
как командой не помню, в EM - для базы Properties/Options/Recurcive triggers - надо убрать галочку
29 окт 04, 18:40    [1072376]     Ответить | Цитировать Сообщить модератору
 Re: А зачем нужен этот монстр....... MS SQL?  [new]
Pi
Member

Откуда:
Сообщений: 278
protector

Задача проверки констрейнтов, не реализуемых стандартными методами, обычно и возлагается на тригеры. А эти констрейнты могут быть очень сложные и что в таком случае делать? Селект-то из таблицы не сделаешь в for each row. Вот и приходится всё делать через одно место. ;)

Posted via ActualForum NNTP Server 1.1


Я сейчас поддерживаю систему, конкурирующую с SAP/R3. Так вот, она - система, - работает только на Oracle. В ней
OBJECT_TYPE              Q-ty
------------------ ----------
INDEX                    3314
PACKAGE                  4566
PACKAGE BODY             4560
PROCEDURE                   2
SEQUENCE                  402
TABLE                    2651
TRIGGER                   131
VIEW                     5259
разнообразных объектов, но - нет ни одного констрайнта. Нет, и все тут! И знаете - это очень удобно!
Ди из имеющихся 131 триггера все - поддержка системных функций (системных в смысле пакета, не в смысле Оракле).

Имеет смысл учесть. Впрочем, я не очень представляю себе, как это сделать в таком объеме на MS SQL. Пакетов там по-прежнему нет... Или я не прав?
29 окт 04, 18:53    [1072402]     Ответить | Цитировать Сообщить модератору
 Re: А зачем нужен этот монстр....... MS SQL?  [new]
protector
Member

Откуда: Иваново, Россия
Сообщений: 600

[quot SergSuper]
К щастью дискуссия не ушла во флейм и появились действительно рабочие примеры, за что всем не поленившимся написать большое спасибо. Кстати хотелось бы увидеть как это делается на DB2 и InterBase.
[quot]
Что-ж выкладываю пример для Interbase. Так-же полный скрипт.
CREATE TABLE TR (
    ID       INTEGER NOT NULL,
    PARENT   INTEGER,
    CAPTION  VARCHAR(99)
);

CREATE TRIGGER TR_AD0 FOR TR
ACTIVE AFTER DELETE POSITION 0
AS
begin
  delete from tr where parent = old.id;
end;

Заполнил 700 записей через генератор тестовых данных IBExpert. Потом сделал.

  update tr set parent = id-1
Таким образом глубина вложенности дерева = 700
Тригер такой
CREATE TRIGGER TR_AD0 FOR TR
ACTIVE AFTER DELETE POSITION 0
AS
begin
  delete from tr where parent = old.id;
end
Выполняем:
delete from tr where parent=0
Всё ок. Время вполне приемлимое 450мс. Хотя производительность сильно зависит от нагрузки на базу. имерятся тут ИМХО нечем.
Сразу скажу, что при глубине дерева более 700 этот тригер работать не будет, т.к. ограничении 700 рекурсивных вызовов для Винды и 1000 для Linux.
Согласитесь, что тригер в одну строчку писать всегда приятней :)





Posted via ActualForum NNTP Server 1.1

29 окт 04, 19:04    [1072421]     Ответить | Цитировать Сообщить модератору
 Re: А зачем нужен этот монстр....... MS SQL?  [new]
protector
Member

Откуда: Иваново, Россия
Сообщений: 600

Pi

protector


Задача проверки констрейнтов, не реализуемых стандартными методами, обычно и возлагается на тригеры. А эти констрейнты могут быть очень сложные и что в таком случае делать? Селект-то из таблицы не сделаешь в for each row. Вот и приходится всё делать через одно место. ;)


Я сейчас поддерживаю систему, конкурирующую с SAP/R3. Так вот, она - система, - работает только на
Oracle. В ней OBJECT_TYPE              Q-ty
------------------ ----------
INDEX                    3314
PACKAGE                  4566
PACKAGE BODY             4560
PROCEDURE                   2
SEQUENCE                  402
TABLE                    2651
TRIGGER                   131
VIEW                     5259
разных объектов, но - нет ни одного констрайнта. Нет, и все тут! И знаете - это очень удобно!

А интересно, почему их там нет? И как поддерживается целостность данных? Через клиента? И чем удобно отсутствие констрейнтов?

Posted via ActualForum NNTP Server 1.1

29 окт 04, 19:14    [1072441]     Ответить | Цитировать Сообщить модератору
 Re: А зачем нужен этот монстр....... MS SQL?  [new]
Pi
Member

Откуда:
Сообщений: 278
protector

А интересно, почему их там нет? И как поддерживается целостность данных? Через клиента? И чем удобно отсутствие констрейнтов?


1. Если бы логика поддерживалась клиентом - то тогда откуда бы взялась поддержка исключительно на Оракле? Нелогично, согласитесь! На самом деле архитектура - "правильная" трехслойная (см. картинку)

2. Вся бизнес-логика поддерживается через пакеты Оракла. Вот почему их так много - см. мой пост выше. Кстати, система полностью объектная! Насколько я знаю, она - единственная полностью объектная в первой мировой пятерке пакетов класса Business Suite.

3. Чем удобна поддержка правил через программный код? Во-первых, администрированием. Нет проблем с начальным заполнением таблиц и прочего. Во-вторых, в реально большой системе правила обычно описываются достаточно сложно, и всегда наступает момент, когда приходится к системным констрейнтам добавлять процедурные. И тогда наступает морока - где же что и как реализовано. Но когда изначально все сделано через процедуры - то гораздо легче ориентироваться.

Конечно, система имеет свои правила - а как бы иначе объектная прикладная система могла бы существовать на необъектнем Оракле, например, версии 7.3 или раньше? Так вот, отказавшись от констрейнтов ,разарботчики построили свою систему правил, и приняв ее, ты оказываешься в предсказуемом мире.

Кроме того, система теперь может работать в распределенном режиме. Надеюсь, распространяться об ограничениях на системные констрайнты в распределенном мире с поддержкой синхронизации не приходится.

К сообщению приложен файл. Размер - 0Kb
29 окт 04, 19:55    [1072505]     Ответить | Цитировать Сообщить модератору
 Re: А зачем нужен этот монстр....... MS SQL?  [new]
Pi
Member

Откуда:
Сообщений: 278
Ну что ж, пятница удалась, нормально поговорили.

А все же, сможет ли кто-нибудь сказать мне причины проблемы в моем посте от 29 Октября, 14:31 в этой ветке
select sum(store_sales) Sum from sales_fact_1997 t
where customer_id = 2094
and product_id=173;
...

Очень хотелось бы услышать ответ. Можно здесь, а можно и здесь

Этот вопрос как раз из тех, что показывают разницу в парадигмах...
29 окт 04, 20:05    [1072514]     Ответить | Цитировать Сообщить модератору
 Re: А зачем нужен этот монстр....... MS SQL?  [new]
Pi
Member

Откуда:
Сообщений: 278
Кстати, а есть ли на этом сайте указывать ссылку на конкретный пост?
29 окт 04, 20:06    [1072515]     Ответить | Цитировать Сообщить модератору
 Re: А зачем нужен этот монстр....... MS SQL?  [new]
ASCRUS
Member

Откуда: МО Электросталь
Сообщений: 5994
Pi
Кстати, а есть ли на этом сайте указывать ссылку на конкретный пост?

Есть :) Нажмите на id нужного сообщения и скопируйте с адресной строки браузера ссылку.
29 окт 04, 22:26    [1072638]     Ответить | Цитировать Сообщить модератору
 Re: А зачем нужен этот монстр....... MS SQL?  [new]
vadiminfo
Member

Откуда: Обнинск
Сообщений: 4802
автор

1. Приведенный пример в Oracle выглядит сложнее. С этим я с товарищем Pi полностью согласен. Выражаясь его языком - выглядит как этот тот самый геморрой.

Но приведенный пример и на SQL не выглядит привлекательно (я, например не врач геммороев не видел, не могу сравнить с ними примеры).
Кроме того, если сравнивать примеры, то нужно отметить, что ради выполнения одного триггера в MS SQL понадобилось настраивать опцию всей БД - отключение рекурсий. А если для дркугого триггера она все-таки нужна? Что они будут делать вместе? Нет в примере Оракла и циклов, но есть пакет (ради реализации того, что в ASA делает глобальная переменная). И то и другое есть некоторое отдаление от SQL - языка БД в сторону процедурного языка. А задача внешне выглядит как не требующая ничего кроме триггера и в нем только DML.
Возможно, в дальнейших усовершенствованиях нуждаются и триггера и, наверное, SQL для приведенных СУБД. Наверное, эта ситуация будет улучшаться в дальнейших версиях.
Все-таки,пока кажется, что в примере для Оракла в этом смысле непроцедурности больше, чем в MS SQL т.е. больше языка БД. Там непроцедурность связана только с обходом рекурсий, с данными работает один запрос в триггере, без циклов (этой печати процедурности). Речь конечно идет только о приведенных примерах.
Примеры ASA и Inerbase немного выглядят получше. Но я не понял, это глобальная переменная сессии или где ее область видимости? Не может быть конфлитка из-за нее между сессиями или транзакциями?
29 окт 04, 22:37    [1072647]     Ответить | Цитировать Сообщить модератору
 Re: А зачем нужен этот монстр....... MS SQL?  [new]
vadiminfo
Member

Откуда: Обнинск
Сообщений: 4802
ASCRUS

Насколько я понимаю, чтобы все это проделать в Оракле одним чистым запросом отделаться нельзя будет.

Возможно. Но привидите пример, когда в Оракле одним чистым запросом отделаться нельзя будет, а в ASA можно. Хотелось бы посмотреть.
Хотя ясно, что это все уже выходит за пределы реляционной алгебры. Т.е. производители СУБД, отвечая требованиям стремятся расширять SQL в сторону не выразимых в реляционной алгебре запросов. В данном случае транзитивных замыканий.
У меня тоже найдется, наверное, интересный пример запроса для того, чтобы посмотреть как это у Вас.
29 окт 04, 22:56    [1072661]     Ответить | Цитировать Сообщить модератору
 Re: А зачем нужен этот монстр....... MS SQL?  [new]
vadiminfo
Member

Откуда: Обнинск
Сообщений: 4802
Извиняюсь, в примере Оракла тоже есть цикл, не внимательно посмотрел.
30 окт 04, 00:07    [1072688]     Ответить | Цитировать Сообщить модератору
 Re: А зачем нужен этот монстр....... MS SQL?  [new]
SergSuper
Member

Откуда: SPb
Сообщений: 5488
vadiminfo
Но приведенный пример и на SQL не выглядит привлекательно (я, например не врач геммороев не видел, не могу сравнить с ними примеры).

Да это ж я над Pi иронизировал, неужели можно было серьёзно воспринимать?
Но кстати и по количеству строчек и по количеству идентификаторов на MS SQL короче...

vadiminfo
нужно отметить, что ради выполнения одного триггера в MS SQL понадобилось настраивать опцию всей БД - отключение рекурсий. А если для дркугого триггера она все-таки нужна?

Я лично никогда не ставлю рекурсивность триггеров. Её ввели с 7-й версии непонятно зачем. Мне тоже кажется это неудачным решением - установкой одной галочки меняется вся логика базы. А здесь привел пример для такой настройки чтоб наглядней было. Лучше б сразу написал почеловечески :)

vadiminfo
Все-таки,пока кажется, что в примере для Оракла в этом смысле непроцедурности больше, чем в MS SQL т.е. больше языка БД.

А копирование записей по одной из одной таблицы в другую - тоже процедурностью отдаёт.
Чем мне нравится на MS SQL и особенно на SyBase - нет операций по одной записи и нет рекурсий, а в последнем еще и цикла. А кстати что - удалять с помощью рекурсивного запроса нельзя? Может удалось бы обойтись без временной таблицы?
30 окт 04, 00:45    [1072702]     Ответить | Цитировать Сообщить модератору
 Re: А зачем нужен этот монстр....... MS SQL?  [new]
vadiminfo
Member

Откуда: Обнинск
Сообщений: 4802
Я переписал Оракловый триггер из примера, который привел softwarer, чтобы в нем не было цикла. Он сработал на том же примере, что привел softwarer.

create or replace trigger ad_parented_cascade_s
  after delete on parented
begin
  if parented_deleting.into_cascade then return ; end if ;
  parented_deleting.into_cascade := true ;

delete from parented 
 where id in 
  (select id from parented   
    start with parent_id = parented_deleting.id 
    connect by prior id = parent_id
    );


  parented_deleting.into_cascade := false ;
exception 
  when others then
    parented_deleting.into_cascade := false ;
    raise ;
end ;


Конечно, все это может быть нуждается в более глубоком тестировании.

Я по прежнему думаю, что главное не то что бы работало любой ценой, а чтобы средства решения задачи максимально соотносились с ней. В частности, удаление данных - это то для чего есть язык БД. Триггеры - это просто способ выполнить нужные инструкции DML в ответ на изменение данных. Т.е. мы могли бы говорить о триггерах SQL. Это имеет значение и для модели данных. Она лучше читается. И соответственно упрощается разработка и сопровождение. Конечно, в сложных случаях языка БД может не хватить для удаления данных, связанных между собой достаточно сложно. Но это недостаток языка БД. В данном случае версия SQL Оракла позволяет удалить легко, но чтобы реализовать каскадное удаление все еще нужны средства PL/SQL.
30 окт 04, 01:21    [1072720]     Ответить | Цитировать Сообщить модератору
 Re: А зачем нужен этот монстр....... MS SQL?  [new]
ASCRUS
Member

Откуда: МО Электросталь
Сообщений: 5994
автор
А кстати что - удалять с помощью рекурсивного запроса нельзя? Может удалось бы обойтись без временной таблицы?

Ну если засунуть его в представление или хранимку (они могут использоваться как параметризированные представления в запросах), то можно :) Вполне возможно в выходящей 9.0.2 такие проблемы синтаксиса будут решены вообще окончательно - довольно долго на форуме обсуждения развития ASA шла дискуссия о вводе в семантику WatcomSQL возможности обьявления временного представления с поддержкой области видимости, фактически это аналог COMMON TABLE EXPRESSION, но не на SELECT, а на весь блок BEGIN...END и всего, что из него вызывается. Если сделают, будет замечательно. Сейчас я пока только узнал про 9.0.2, что там будет опция ограничения ресурсов на сессию, позволяющая устанавливать квоту на использование размера временных таблиц и вес обрабатываемых запросов - я так понимаю разработчики ASA не зря 6 последних месяцев так много общались на форумах с ораклистами, которые в том числе работают на ASA и готовы рассказать, чего же им не хватает по сравнению с Ораклом. Если они будут так же продолжать придерживаться текущих мировозрений: "Простота без ограничений - залог успеха" и "Развитие продукта зависит от потребностей пользователей, а не политики менеджеров", плюс дальше тащить лучшие решения с других СУБД, то лично я только ЗА :) Кстати вполне допускаю мысль что действительно довольно динамичное развитие ASA связано с тем, что во первых Sybase сосредоточен на своей ASE, он не вмешивается в дела дочерней iAnywhere (бывший Watcom) и главное - у него действительно плохо с менеджментом, так что в реале ASA развивается только по пожеланиям ее пользователей и наверное может у них там считаться настоящей "народной" коммерческой СУБД. Наглядный пример этого - на фоне того, что ASA стала еще и веб-сервером, сейчас с удовольствием подключились к ее развитию веб-интерфейсов PHP-шники и в этом направлении она уже стала из месяца в месяц расти и расширяться :)
30 окт 04, 01:27    [1072722]     Ответить | Цитировать Сообщить модератору
 Re: А зачем нужен этот монстр....... MS SQL?  [new]
ASCRUS
Member

Откуда: МО Электросталь
Сообщений: 5994
автор
Я по прежнему думаю, что главное не то что бы работало любой ценой, а чтобы средства решения задачи максимально соотносились с ней. В частности, удаление данных - это то для чего есть язык БД. Триггеры - это просто способ выполнить нужные инструкции DML в ответ на изменение данных. Т.е. мы могли бы говорить о триггерах SQL. Это имеет значение и для модели данных. Она лучше читается. И соответственно упрощается разработка и сопровождение. Конечно, в сложных случаях языка БД может не хватить для удаления данных, связанных между собой достаточно сложно. Но это недостаток языка БД. В данном случае версия SQL Оракла позволяет удалить легко, но чтобы реализовать каскадное удаление все еще нужны средства PL/SQL.

Я не очень понимаю между Вашими терминами "язык БД", "DML" и "PL/SQL" (который все еще нужен). У меня в ASA есть диалект WatcomSQL, который обхватывает собой все - DDL, DML, язык хранимых процедур, расширения, администрирование и резервное копирование, репликацию, защиту и даже обработку HTML и XML и создание различных видов веб-сервисов. В нем так же можно работать и с обьектами Java как родными, хранить сериализованные обьекты Java в полях таблиц и обрабатывать их в запросах, обращаясь к полям и методам обьектов записей (правда Java тут ни разу и не пригодилась). Разве в Оракле PL/SQL не является таким же единым стандартном, почему Вы ему отводите только роль языка хранимых процедур ?
30 окт 04, 01:44    [1072726]     Ответить | Цитировать Сообщить модератору
 Re: А зачем нужен этот монстр....... MS SQL?  [new]
vadiminfo
Member

Откуда: Обнинск
Сообщений: 4802
ASCRUS

Я не очень понимаю между Вашими терминами "язык БД", "DML" и "PL/SQL" (который все еще нужен).

Язык БД(DL) - в данном случае SQL, точнее его диалект. DML - язык манипулирования данными - подязык языка БД, наряду с DDL - языком описания данных. Я придаю им значение поскольку они собственно и реализуют модель данных БД. В частности, DML реализует компоненту модели - манипулирование данными. Удаление - входит в это манипулирование. Про PL/SQL я сказал, что он все еще нужен там, где должно было хватить DL. Т.е. речь шла конкрето об удалении, а не вообще о всех задачах связанных с БД.

ASCRUS

). У меня в ASA есть диалект WatcomSQL, который обхватывает собой все - DDL, DML, язык хранимых процедур, расширения, администрирование и резервное копирование, репликацию, защиту и даже обработку HTML и XML и создание различных видов веб-сервисов. В нем так же можно работать и с обьектами Java как родными, хранить сериализованные обьекты Java в полях таблиц и обрабатывать их в запросах, обращаясь к полям и методам обьектов записей (правда Java тут ни разу и не пригодилась). Разве в Оракле PL/SQL не является таким же единым стандартном, почему Вы ему отводите только роль языка хранимых процедур ?

Эти средства выходят за рамки модели данных - тут уже элементы приложения пошли. Тут другое дело. PL/SQL - язык хранимых процедур. И для Java у Оракла есть даже своя машина. И тоже может запускаться из PL/SQL Java.
Более того, Оракл поддерживает Объектно реляционную модель данных, полуструктурированную модель данных XML, элементы документальных и геоинформационных моделей. Более того, вложенные таблицы Оракла некоторые относят к сетевым моделям данных. Репликацию он поддерживает и систему сробщений. Да и много еще чего. Я слышал, что полная дока по Ораклу 10 000 страниц.

Я про другое. Реляционная модель все-таки базовая модель Оракла. Модель данных играет важную роль в технолгиях БД. И потому все что ее касается, желательно реализовать по возможномти на языке БД. В частности, удаление. Конечно, в реляционную модель, не входят, например, ограничения целостности общего вида. Или нужно много разных команд DL запускать из приложения. Или реализовывать часть логики приложения на сервере БД. Тогда естественно, что язык БД на это и не расчитан. Тогда PL/SQL. Или Java, если не хватает PL/SQL. А для удаления применение процедурных языков выглядит как заплатка. Это уже все-таки пошли программные ухищрения.

Кстати, насчет стандартов. Про какие стандарты Вы говорите? Язык БД - SQL имеет стандарты. С++ имеет. А PL/SQL наверное не собираются подгонять ни под какие стандарты. Кстати, стандарты по SQL писались с учетом ведущих СУБД, где Оракл учитывался. Я почитываю толстые книги по БД вообще и там часто вижу Оракловый синтаксис. Сегодня в связи с нашим общением здесь заглянул в одну такую книгу. Там в разделе Триггера (я хотел про концепцию триггеров вообще посмотреть) описываются Оракловые. NEW и OLD есть, а про inserted и deleted ни слова. Хотя с другой стороны, это еще ничего не значит.
30 окт 04, 02:43    [1072740]     Ответить | Цитировать Сообщить модератору
 Re: А зачем нужен этот монстр....... MS SQL?  [new]
ChA
Member

Откуда: Москва
Сообщений: 11381
SergSuper большое спасибо, впервые увидел, как адепты разных платформ достаточно продуктивно обменивались методами решения одной из задач, что характерно, без (ну почти) гнутия пальцев. Ведь могут :)
Кстати, можно не убирать рекурсивность триггеров в Вашем примере, достаточно в первой строке вставить нечто вроде
IF TRIGGER_NESTLEVEL() > 1 RETURN
. Обычно пользую в подобных ситуациях именно с целью избегания рекурсивного срабатывания триггеров.

Пока читал дискуссию, не раз возникало сожаление, что разные "вкусности" "живут" в разных платформах, и нет ни одной, на которой было бы все. Отдельное спасибо ASCRUS, ему не программированием заниматься надо, а идти в менеджеры по продажам, возможно платформа Sybase получила бы большее распространение, нежели сейчас. Шальная мысль, может и правда перейти на ASA ? :)
vadiminfo
описываются Оракловые. NEW и OLD есть, а про inserted и deleted ни слова.
NEW и OLD есть не только у Oracle, что, впрочем не важно. Насколько я понимаю, то процедурные расширения на данный момент выходят за рамки стандарта и отданы на откуп производителям СУБД, хотя и есть робкие попытки все таки его выработать. Лично мне кажется, что время уже упущено, так как по историческим причинам каждый производитель уже так долго следует своим курсом, что загнать всех на одно шоссе практических шансов нет. Тем более, что многие "фичи" часто тесно связаны с особенностью реализаций соответствующих engine.
30 окт 04, 04:11    [1072749]     Ответить | Цитировать Сообщить модератору
 Re: А зачем нужен этот монстр....... MS SQL?  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 67469
Блог
PL99
Есть в ASA еще одна удобная фича, о которой, по-моему, почему-то до сих пор не упомянули - можно создать несколько триггеров каждого вида

Фича удобная - но я в какой-то момент пришел к выводу, что она скорее вредна. Причина - она не дает принципиальных преимуществ, но подталкивает к плохому стилю программирования.

Имхо: если триггера абсолютно независимы (чаще всего это бывает, когда навешены некие "стандартные", часто автосгенерированные триггера - типа аудита) - все, в общем, нормально, и порядок выполнения постановочно не при чем.

Если же порядок имеет значение - надо выделить подпрограммы (вообще в триггерах лучше не писать "большого" кода, имхо), а в триггере явно вызывать их в нужном порядке. Во-первых, это "читабельнее", а во-вторых - снимает вторичные проблемы (например - что будет, если я сделаю disable среднему триггеру в такой цепочке? полагаю - ничего хорошего).
1 ноя 04, 13:04    [1074771]     Ответить | Цитировать Сообщить модератору
 Re: А зачем нужен этот монстр....... MS SQL?  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 67469
Блог
Pi
Когда пересел на MS SQL (6.5), то необходимость
drop trigger Trigger_tr (невозможность его отключить) приводила к полному безобразию

Думаю, такие недоработки бывают везде. Хотя на вашем месте я бы написал процедурку, которая перед дропом сохраняла бы текст дропаемых объектов ;)

Так, в Оракле до девятой, кажется, версии вместе с ключом дропался индекс, поддерживающий этот ключ ("вместе" - это в смысле disable constraint приводил к удалению индекса). И пока не было deferrable constraint-ов, это было весьма неудобно - надо провести "тихий" хак, а тут дропается индекс и все пользователи это живо ощущают. Сейчас, правда, есть и deferrable и нормальная возможность сохранить индекс.
1 ноя 04, 13:10    [1074796]     Ответить | Цитировать Сообщить модератору
 Re: А зачем нужен этот монстр....... MS SQL?  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 67469
Блог
vadiminfo
Я переписал Оракловый триггер из примера, который привел softwarer, чтобы в нем не было цикла. Он сработал на том же примере, что привел softwarer.

Вполне нормально. К сожалению, я публиковался очень наспех.
1 ноя 04, 13:15    [1074841]     Ответить | Цитировать Сообщить модератору
 Re: А зачем нужен этот монстр....... MS SQL?  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 67469
Блог
ChA
Отдельное спасибо ASCRUS, ему не программированием заниматься надо, а идти в менеджеры по продажам, возможно платформа Sybase получила бы большее распространение, нежели сейчас. Шальная мысль, может и правда перейти на ASA ? :)

К сожалению, "удобство программирования" является далеко не первым из возможных аргументов в пользу выбора той или иной СУБД. Хотя свою и заметную цену, безусловно, имеет.
1 ноя 04, 13:20    [1074866]     Ответить | Цитировать Сообщить модератору
 Re: А зачем нужен этот монстр....... MS SQL?  [new]
ChA
Member

Откуда: Москва
Сообщений: 11381
ChA
без (ну почти) гнутия пальцев. Ведь могут

softwarer
"удобство программирования" является далеко не первым из возможных аргументов в пользу выбора той или иной СУБД
Как бы, в курсе...
1 ноя 04, 15:41    [1075447]     Ответить | Цитировать Сообщить модератору
 Re: А зачем нужен этот монстр....... MS SQL?  [new]
Nikolay Kulikov
Member

Откуда: Москва
Сообщений: 607
Кто-то спрашивал как будет для DB2. Я устал перечитывать переделал триггер
ASCRUS'a

CREATE TRIGGER ProductGroup_DeleteChild AFTER DELETE
REFERENCING OLD AS ParentsDeleted
FOR EACH STATEMENT
BEGIN

  // Получаем дочерние ноды через рекурсивный запрос и удаляем их
 DELETE FROM  ProductGroup WHERE ProductGroup_id IN
    WITH h (Parent_id, Node_id) AS (
      SELECT Parent_id, ProductGroup_id
      FROM ProductGroup
      WHERE Parent_id IN (
              SELECT ProductGroup_id
              FROM ParentsDeleted )
      UNION ALL
      SELECT g.Parent_id, g.ProductGroup_id
      FROM ProductGroup g
        INNER JOIN h ON h.Node_id = g.Parent_id )
    SELECT Node_id
    FROM h;

// Обработка ошибок в теле триггера

END;
1 ноя 04, 16:29    [1075691]     Ответить | Цитировать Сообщить модератору
 Re: А зачем нужен этот монстр....... MS SQL?  [new]
ASCRUS
Member

Откуда: МО Электросталь
Сообщений: 5994
Как минимум забыли указать в триггере строчку:
ORDER 1 ON ProductGroup
Плюс подзапрос в IN по идее нужно взять в ( ).

P.S. Как все таки мы похожи :)
1 ноя 04, 17:12    [1075877]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 8 9 10 11 12 13 14 [15] 16 17   вперед  Ctrl
Все форумы / Сравнение СУБД Ответить