Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
1-1116501266
microcomp
2005-05-19 15:14
2005.06.06
Дельфийский ассемблер


14-1116477797
+Серега+
2005-05-19 08:43
2005.06.06
Операционная система


1-1116485622
StPu
2005-05-19 10:53
2005.06.06
Как получить список файлов


1-1116916439
Pavelkq
2005-05-24 10:33
2005.06.06
Переброска массивов


1-1116843208
Fynjy1984
2005-05-23 14:13
2005.06.06
TChart Как преобразовать координаты





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский