Форум: "Базы";
Текущий архив: 2005.06.06;
Скачать: [xml.tar.bz2];
ВнизВопрос о триггерах Найти похожие ветки
← →
андрей123 (2005-04-22 08:49) [0]В IB создан триггер BEFORE DELETE для таблицы Приход для проверки условия Приход№1<Остаток. Можно ли в триггере отменить удаление записи или сделать UPDATE если Приход№1>Остаток.
← →
Johnmen © (2005-04-22 09:08) [1]Возбудить EXCEPTION.
← →
Anatoly Podgoretsky © (2005-04-22 09:22) [2]Для этого существуют ограничения на таблицу Constraint
← →
андрей123 (2005-04-22 10:08) [3]{1}
Возбудить EXCEPTION в триггере - ?
{2}
Что проверяется раньше: Ограничение или триггер
← →
Johnmen © (2005-04-22 10:12) [4]{1}
Да.
{2}
Ограничение.
← →
андрей123 (2005-04-22 11:17) [5]Можно по EXCEPTION более подробно.
← →
Johnmen © (2005-04-22 11:19) [6]Можно. на http://www.ibase.ru
← →
андрей123 (2005-04-22 14:27) [7]Спасибо за ссылку.
Я разобрался вроде бы.
т.е.
В триггере для таблицы Приход проверяем условие Приход№1<Остаток если условие не выполняется выполняем EXCEPTION и удаление записи
не происходит + выдаем в программе сообщение "Не могу удалить..."
Правильно-?
← →
Desdechado © (2005-04-22 19:10) [8]exception отменяет текущую транзакцию целиком
если это только удаление записи в таблице с триггером, то отменится удаление записи - вручную не обязательно (а иногда и вредно) что-то еще делать
← →
Johnmen © (2005-04-23 20:02) [9]>Desdechado © (22.04.05 19:10) [8]
>exception отменяет текущую транзакцию целиком
Эт ты загнул...:)
← →
DrPass © (2005-04-23 20:22) [10]Ну, если человек машинально пишет
except
Transaction.Rollback;
end;
...
:)
← →
Desdechado © (2005-04-25 10:57) [11]2 Johnmen
признаю, выразился некорректно :)
exception прерывает нормальное течение транзакции, а обработать это можно по-разному
я просто имел ввиду, что Rollback, о котором сказано DrPass, как раз отменит в этой ситуации всю транзакцию
← →
Johnmen © (2005-04-25 11:04) [12]>Desdechado © (25.04.05 10:57) [11]
>exception прерывает нормальное течение транзакции,
Да нет же. Он может лишь "прервать нормальное течение" триггера/процедуры. Тр-ия здесь непричём....
← →
Desdechado © (2005-04-25 11:18) [13]так, тогда стоит разобраться - а что, триггер/процедура вне транзакции выполняются, что ли?
странная мысль...
← →
Johnmen © (2005-04-25 11:27) [14]>странная мысль...
Не возьмусь судить о твоих мыслях :)
Выполняются в контексте, ес-но. Ну и что?
← →
Desdechado © (2005-04-25 11:38) [15]а то, что прерывание нормального течения одного из элементов транзакции является прерыванием нормального течения самой транзакции, о чем я и говорил в [11]
← →
Johnmen © (2005-04-25 12:07) [16]Странные слова ты говоришь... Ты их сам придумал или прочёл где-то ? Если второе, то приведи, пожалуйста, источник.
← →
Desdechado © (2005-04-25 13:05) [17]Это, имхо, логично следует из определения понятия транзакции.
Хотя, если философски подойти к вопросу, то "нормальное течение транзакции" может быть любым, в том числе и с прерываниями, с откатами и т.д. Но я подразумевал именно завершающуюся коммитом транзакцию.
← →
Johnmen © (2005-04-25 14:55) [18]>Это, имхо, логично следует из определения понятия транзакции.
Хм... Что это "это"?
>Но я подразумевал именно завершающуюся коммитом транзакцию.
Появление ошибок никак не связано с успешностью коммита.
Более того, желание закоммитить может возникнуть после получения ошибки...
← →
Desdechado © (2005-04-25 16:34) [19]это=[15]
зато успешность коммита очень с ними связана (это как про рыбу и селедку)
а по поводу желаний - иногда и без повода (читай - транзакции) хочется коммититься :)
да только не об этом речь, наверно
← →
Johnmen © (2005-04-25 17:04) [20]>зато успешность коммита очень с ними связана
С ними, это с ошибками ? Да никак не связана !
Вобщем, я чувствую, "твоя моя непонимай"...:)))
← →
Desdechado © (2005-04-25 17:42) [21]Если коммититься с 10-й попытки, после устранения всех ошибок, то прямой связи нет. Но факт "устранения ошибок" как-то все-таки связан с ними, не так ли?
И я думаю, ты понимаешь, что закоммитить транзакцию, которая подняла exception, нельзя без дополнительных махинаций с данными.
> я чувствую, "твоя моя непонимай"
ай, одни эмоции :)
← →
Johnmen © (2005-04-25 18:03) [22]>И я думаю, ты понимаешь, что закоммитить транзакцию, которая
>подняла exception, нельзя без дополнительных махинаций с данными.
Нет. Не понимаю. exception поднимает не транзакция, а сервер.
Не зависимо от "поднятия" коммит я сделаю...
← →
Desdechado © (2005-04-25 18:09) [23]Ок, я снова впопыхах выразился некорректно. Надо - "транзакцию, в которой поднято exception".
> Не зависимо от "поднятия" коммит я сделаю
Хочу на это поглядеть, но при условии "без дополнительных махинаций с данными".
← →
Johnmen © (2005-04-25 18:13) [24]Хм... На что смотреть ? На то, как выполнится COMMIT ? И при этом без ошибки выполнится ?
Да без проблем. Ты и сам можешь...
← →
андрей123 (2005-04-26 08:02) [25]to Johnmen © ,Desdechado ©
В свете вашего диалога возник вопрос:
Если в триггере изменяется своя (та в которой создан триггер) таблица то триггер "вызывается" еще раз и допустим там происходит exception. Сохранятся ли изменения сделанные первым триггером ?
← →
Johnmen © (2005-04-26 09:44) [26]Думаю, что да. Можно же проверить...
← →
Desdechado © (2005-04-26 13:04) [27]если по пойманному exception сделать откат транзакции, то, ес-но, нет
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2005.06.06;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.013 c