![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Ведение логов изменения некоторой величины [D7, Firebird]
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]апдейт таблицы в триггере после апдейта этой же таблицы?