Как предотвращают рекурсию триггеров?

ЧАстые Вопросы и Ответы

Модераторы: kdv, CyberMax

Ответить
shempeev
Сообщения: 8
Зарегистрирован: 13 окт 2006, 16:07

Как предотвращают рекурсию триггеров?

Сообщение shempeev » 23 дек 2006, 14:01

Здаствуйте.

При изменении таблицы в триггере на AFTER UPDATE

в зависимости от значения NEW.FIELD1 нужно поменять остальные
FIELD1 - что конечно вызывет рекурсию


Что в это случае делют?

Я вот подумал сначала- в начале "тела" триггера сделать его же не активным,
а вконце снова активировать

Но эти изменения не наступят ведь в силу до конца транзакции

Да и другие пользаватели могут наткнуться на неработающий триггер?

Как быть?

FireBird 1.5

Заранее спасибо

stix-s
Заслуженный разработчик
Сообщения: 557
Зарегистрирован: 13 дек 2005, 11:52

Re: Как предотвращают рекурсию триггеров?

Сообщение stix-s » 23 дек 2006, 14:46

shempeev писал(а):Здаствуйте.

При изменении таблицы в триггере на AFTER UPDATE

в зависимости от значения NEW.FIELD1 нужно поменять остальные
FIELD1 - что конечно вызывет рекурсию


Что в это случае делют?

Я вот подумал сначала- в начале "тела" триггера сделать его же не активным,
а вконце снова активировать

Но эти изменения не наступят ведь в силу до конца транзакции

Да и другие пользаватели могут наткнуться на неработающий триггер?

Как быть?

FireBird 1.5

Заранее спасибо
а ты пробовал? и получил рекурсию? не верю

dimitr
Разработчик Firebird
Сообщения: 888
Зарегистрирован: 26 окт 2004, 16:20

Re: Как предотвращают рекурсию триггеров?

Сообщение dimitr » 23 дек 2006, 15:48

shempeev писал(а):При изменении таблицы в триггере на AFTER UPDATE в зависимости от значения NEW.FIELD1 нужно поменять остальные FIELD1
почему бы не использовать для этого триггер BEFORE UPDATE?

shempeev
Сообщения: 8
Зарегистрирован: 13 окт 2006, 16:07

Re: Как предотвращают рекурсию триггеров?

Сообщение shempeev » 23 дек 2006, 16:24

а ты пробовал? и получил рекурсию? не верю
Да да
Все правильно
Косяк был в другом

Просто
"Too many executions" - принял за многократный вызов

Спасибо, вопрос снят

Ответить