![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
В триггере узнать какие поля обновились
Sour © (2005-02-18 11:04:00)Есть триггер Before Insert для некоторой таблицы. В нем надо определить не изменилось ли поле field1.
Как это сделать правильно?
Я пробую так:
new.field1 <> old.field1.
Эта конструкция хорошо работает, но если старое или новое значение is null, тогда не хочет.
Firebird 1.5
stud (2005-02-18 13:21:00) [1]а если например так?
if ((coalesce(old.naim,'-1'))<>(coalesce(new.naum,'-1'))) then
ЮЮ (2005-02-18 11:33:00) [2]1)
if
(new.field1 IS NULL) AND NOT (old.field1 IS NULL) OR
NOT (new.field1 IS NULL) AND (old.field1 IS NULL) OR
(new.field1 <> old.field1)
then
изменилось
2)
if
NOT (
(new.field1 IS NULL) AND (old.field1 IS NULL) OR
(new.field1 = old.field1)
)
then
изменилось
Sergey13 (2005-02-18 11:32:00) [3][2] Sour (18.02.05 11:25)
>Я подозреваю нельзя сравнивать null со значением какого-либо типа, т.к. проверка на null выполняется конструкцией is null.
Зато можно проверить что то на NULL.
If (old.field is Null) and (new.field is not Null) then ....
P.N.P. (2005-02-18 11:30:00) [4]Речь идет о проверке на null :
if (new.field1 <> old.field1)or
((new.field1 is null and not old.field1 is null)or
(old.field1 is null and not new.field1 is null)) then
begin
end
Sour (2005-02-18 11:25:00) [5]Какая еще религия?
Более подробно:
1.
//new.filed1 = 'привет';
//old.filed1 = 'пока';
if (new.field1 <> old.field1) then
begin
// в этом случае попадаем в этот блок
end
2.
//new.filed1 = 'привет';
//old.filed1 = null;
if (new.field1 <> old.field1) then
begin
// в этом случае сюда НЕ попадаем!!!!
// хотя должны
end
3.
//new.filed1 = null;
//old.filed1 = 'пока';
if (new.field1 <> old.field1) then
begin
// в этом случае тоже сюда НЕ попадаем!!!!
// хотя должны
end
Я подозреваю нельзя сравнивать null со значением какого-либо типа, т.к. проверка на null выполняется конструкцией is null.
Поэтому и спрашиваю как узнать, что поле изменило значение, независимо от того какое оно было и какое стало (включаю null-значения).
Sergey13 (2005-02-18 11:06:00) [6]> но если старое или новое значение is null, тогда не хочет.
Хм. А проверить это условие в тригере религия не позволяет?