Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Ведение логов изменения некоторой величины [D7, Firebird]


Страницы:   1 2

Mr. D. ©   (2007-03-07 16:36:00) 

Допустим, есть таблица:

id | SomeField | SomeField_history

id - PK
SomeField - integer
SomeField_history - blob, где ведется лог изменения величины в колонке SomeField

Такой триггер имеем:

create trigger my_trig for "TestTable"
active after update position 0
as
 declare variable insert_string blob;
begin
 if ( old.SomeField <> new.SomeField ) then
 begin
   insert_string = 'LOG ' || CAST(new.SomeField as char);
   UPDATE "TestTable" t set t.SomeField_history = :insert_string WHERE t.id = new.id;
 end
end;


Но с этим тригером при изменении величины SomeField выдается ошибка:

Error Message:
----------------------------------------
Unsuccessful execution caused by a system error that precludes
successful execution of subsequent statements.
internal error.

[00542BAF]


Почему же так? :(


Mr. D.   (2007-03-07 22:18:00) [21]

Johnmen ©   (07.03.07 20:10) [7]
Чего подсоблядь? Уже сказали - рекурсия


действительно, сказали. Но хочу заметить, что в посте под номером [3] я пояснил свою точку зрения насчет того, почему я считаю, что это не рекурсия.

Там же стоит условие:

if (old.SomeField <> new.SomeField )

если поле SomeField есть в UPDATE - то выполняется тело IF'а, в котором да, вызывается UPDATE, но уже SomeField не меняется! Поэтому при вторичном вызове триггера IF не сработает.


Johnmen   (2007-03-07 20:10:00) [22]

Чего подсоблядь? Уже сказали - рекурсия.


Mr. D.   (2007-03-07 19:32:00) [23]

Народ, подсобите... :(


Mr. D.   (2007-03-07 18:08:00) [24]


> мистер, сделай присвоение


я не понял смысла фразы


Val   (2007-03-07 17:53:00) [25]

мистер, сделай присвоение.


Mr. D.   (2007-03-07 17:48:00) [26]


> Чё такое рекурсия, знаешь?


знаю! Там же условие стоит:

if (old.SomeField <> new.SomeField )

в моем апдейте, который в триггере, SomeField явно не затрагивается, поэтому условие не должно сработать.


DrPass   (2007-03-07 16:58:00) [27]


> Почему же так? :(

Чё такое рекурсия, знаешь?


Val   (2007-03-07 16:44:00) [28]

апдейт таблицы в триггере после апдейта этой же таблицы?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо