Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.06.06;
Скачать: CL | DM;

Вниз

Вопрос о триггерах   Найти похожие ветки 

 
андрей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;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.05 c
3-1114680454
Barracuda
2005-04-28 13:27
2005.06.06
Создание таблици


14-1116500202
Eraser
2005-05-19 14:56
2005.06.06
Компоненты и алгоритмы для шифрования


1-1116847165
alex-drob
2005-05-23 15:19
2005.06.06
Запуск файла из памяти


1-1116757807
acsoft
2005-05-22 14:30
2005.06.06
Popup menu


8-1108743803
pasha L
2005-02-18 19:23
2005.06.06
Вставка gif а