Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
DB2 - помогите разобраться с транзакциями с триггерами
|
|||
|---|---|---|---|
|
#18+
Добрый день, помогите пожалуйста разобраться с транзакциями в триггерах. Если триггер явно не поддерживает ROLLBACK, то как например откатить изменения если данные не удовлетворяют какому-нибудь условию. Например такая шуточная логика - в поле мотоциклы нельзя добавлять марки машин. Нужен триггер, который проверяет, что если вставленное значение равно "Жигули" то транзакцию нужно откатить. Т.к. в самом триггере ROLLBACK делать нельзя, то я создал процедуру которая выполняет ROLLBACK и вызывается из триггера. Трюк не прошёл. Как только я пытался вставить "запрещённую" запись, я получил ошибку sqlcode: -751 - попытка выполнить неразрешённую комманду. Подскажите как обрабатывать подобные случаи? И если можно, то в чём смысл запрещения отката изменения сделанных в триггере. Например в Sybase можно откатить триггер и изменение которое вызвало откат. Заранее спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2009, 20:02 |
|
||
|
DB2 - помогите разобраться с транзакциями с триггерами
|
|||
|---|---|---|---|
|
#18+
Kru, Триггер не должен откатывать транзакции! Если триггер обнаружил что вы что-то недопустимое делаете, то он должен выбросить код ошибки через команду SIGNAL (вроде). Это и приведет к откату транзакции в том контексте где она была вызвана. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2009, 08:28 |
|
||
|
DB2 - помогите разобраться с транзакциями с триггерами
|
|||
|---|---|---|---|
|
#18+
Kru, Представляю себе сколько было бы сюрпризов, если можно было бы выполнить коммит или роллбэк в триггере. Втихаря. Шуточный пример: Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2009, 10:05 |
|
||
|
DB2 - помогите разобраться с транзакциями с триггерами
|
|||
|---|---|---|---|
|
#18+
Alexey KuznetsovЕсли триггер обнаружил что вы что-то недопустимое делаете, то он должен выбросить код ошибки через команду SIGNAL (вроде). Это и приведет к откату транзакции в том контексте где она была вызвана.Нет. Это приведёт не к откату транзакции, а к тому, что команда, вызвавшая срабатывание этого триггера, вернёт SQLCODE=-438 и SQLSTATE тот, который указан в команде SIGNAL . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2009, 11:44 |
|
||
|
DB2 - помогите разобраться с транзакциями с триггерами
|
|||
|---|---|---|---|
|
#18+
Большое спасибо. Вроде удалось разобраться теперь. Вот сделал небольшой примерчик, чтобы посмотреть как работает триггер. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Вставляю записи в анонимном блоке - ожидаю что всё откатится. Так оно и есть: Код: plaintext 1. 2. 3. 4. Создал процедуру, которая в случае ошибки продолжает работать и просто возвращает последнюю ошибку. Ожидание, что откатится только одна вставка. Так и получилось: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Код: plaintext Ещй раз огромное спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2009, 18:51 |
|
||
|
DB2 - помогите разобраться с транзакциями с триггерами
|
|||
|---|---|---|---|
|
#18+
Mark BarinsteinAlexey KuznetsovЕсли триггер обнаружил что вы что-то недопустимое делаете, то он должен выбросить код ошибки через команду SIGNAL (вроде). Это и приведет к откату транзакции в том контексте где она была вызвана.Нет. Это приведёт не к откату транзакции, а к тому, что команда, вызвавшая срабатывание этого триггера, вернёт SQLCODE=-438 и SQLSTATE тот, который указан в команде SIGNAL . Да Марк, спасибо за уточнние, в принципе я это и имел ввиду, что в том месте где была вызвана команда вызвавшая срабатывания триггера будет возможность поймать этот сигнал и при желании вызвать роллбек или попытаться восстановится ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2009, 10:00 |
|
||
|
|

start [/forum/topic.php?fid=43&fpage=75&tid=1603062]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
60ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
2ms |
| others: | 11ms |
| total: | 163ms |

| 0 / 0 |
