![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
ERwin триггеры на каскадную стратегию [IB6.x]
July © (2006-09-06 12:22:00)Уважаемые мастера!
Подскажите, пожалуйста, как такое возможно - при генерации базы данных по схеме из ERwin, для каскадных стратегий на удаление из таблицы-родителя создаются триггеры на "после
удаления". И оно как-то работает! :) Т.е. получается, что запись, несмотря на наличие дочерних записей в другой таблице, все таки удаляется, а уже потом выполняется триггер и удаляются записи из дочерней таблицы. У меня это все не укладывается в голове, если бы я писала сама триггер для реализации каскадной стратегии, то он был бы на "до удаления".
Хотя я уже догадываюсь, что вероятно проверка ограничений целостности выполняется позднее срабатывания триггеров, но все никак не могу привыкнуть к этой мысли.
Посоветуйте, пожалуйста, что по этому вопросу почитать, чтобы отбросить последние сомнения :)
Val (2006-09-07 14:07:00) [21]>[12] Sergey13 ©
я о том же - нет ли такой фичи и в иб уже?
>[13] Desdechado ©
да, да, но описанное поведение интересно.
Desdechado (2006-09-07 13:59:00) [22]Sergey13 © (07.09.06 13:47) [12]
у нее не Оракл, а IB6
автору
не мудри с триггером, используй Desdechado © (06.09.06 13:29) [4]
Sergey13 (2006-09-07 13:47:00) [23]Действительно странно.
У тебя случайно не отложенная проверка констрейнтов?
select CONSTRAINT_NAME, DEFERRED from dba_constraints
что показывает?
July (2006-09-07 12:49:00) [24]
> Val © (06.09.06 17:15) [9]
ALTER TABLE RECEIPT ADD FOREIGN KEY (BUYCARDID) REFERENCES BUYCARD (BUYCARDID);
поле BUYCARDID not null
> Никакой трактат от огороде тригеров не заменит листинга
> самих тригеров. 8-)
CREATE TRIGGER TD_BUYCARD FOR BUYCARD
ACTIVE AFTER DELETEPOSITION 0
AS
/* ERwin Builtin Mon Apr 04 12:41:20 2005 */
/* DELETE trigger on BuyCard */
DECLARE VARIABLE numrows INTEGER;
BEGIN
/* ERwin Builtin Mon Apr 04 12:41:20 2005 */
/* BuyCard R/93 Receipt ON PARENT DELETE CASCADE */
delete from Receipt
where
/* %JoinFKPK(Receipt,OLD," = "," and") */
Receipt.BuyCardID = OLD.BuyCardID;
......
END
Sergey13 (2006-09-07 08:21:00) [25]> [8] July (06.09.06 17:13)
Никакой трактат от огороде тригеров не заменит листинга самих тригеров. 8-)
Val (2006-09-06 17:15:00) [26]>?.. не поняла
выгрузите из базы ddl-текст внешнего ключа дочерней таблицы на родительскую, работа которого вас смущает.
July (2006-09-06 17:13:00) [27]
> Мне тоже, но ты с огородом тригеров далеко и молчишь. 8-
> )
У меня доступ в сеть только эпизодически.
А что-то еще нужно добавить?
Вроде уже целый трактат накатала в первом посте :) .. о наболевшем :)))
Sergey13 (2006-09-06 14:06:00) [28]> [6] July (06.09.06 13:46)
> Хочется понять
Мне тоже, но ты с огородом тригеров далеко и молчишь. 8-)
July (2006-09-06 13:46:00) [29]Но даже если так, как же он все таки работает, этот огород?
Хочется понять, чтобы учитывать при написании собственных триггеров.
Sergey13 (2006-09-06 13:30:00) [30]> [3] ANB © (06.09.06 13:27)
> Вообще то огород с триггерами для каскадного удаления не
> особо нужен.
Я бы даже сказал вреден, если можно решить через констрейнт. ИМХО.
Desdechado (2006-09-06 13:29:00) [31]FOREIGN KEY ON DELETE CASCADE
ANB (2006-09-06 13:27:00) [32]
> July (06.09.06 13:24) [2]
Вообще то огород с триггерами для каскадного удаления не особо нужен. Достаточно включить каскад в ограничениях по внешнему ключу.
July (2006-09-06 13:24:00) [33]?.. не поняла
Val (2006-09-06 12:52:00) [34]покажите ddl ограничения.