Вниз
Скачать: CL | DM;

В триггере узнать какие поля обновились   Найти похожие ветки 

← →
Sour   (2005-02-18 11:04) [0]

Есть триггер Before Insert для некоторой таблицы. В нем надо определить не изменилось ли поле field1.

Как это сделать правильно?

Я пробую так:
new.field1 <> old.field1.

Эта конструкция хорошо работает, но если старое или новое значение is null, тогда не хочет.

Firebird 1.5


← →
Sergey13 ©   (2005-02-18 11:06) [1]

> но если старое или новое значение is null, тогда не хочет.

Хм. А проверить это условие в тригере религия не позволяет?


← →
Sour   (2005-02-18 11:25) [2]

Какая еще религия?
Более подробно:
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-значения).


← →
P.N.P. ©   (2005-02-18 11:30) [3]

Речь идет о проверке на 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


← →
Sergey13 ©   (2005-02-18 11:32) [4]

[2] Sour   (18.02.05 11:25)
>Я подозреваю нельзя сравнивать null со значением какого-либо типа, т.к. проверка на null выполняется конструкцией is null.

Зато можно проверить что то на NULL.
If (old.field is Null) and (new.field is not Null) then ....


← →
ЮЮ ©   (2005-02-18 11:33) [5]

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
 изменилось


← →
stud ©   (2005-02-18 13:21) [6]

а если например так?
if ((coalesce(old.naim,"-1"))<>(coalesce(new.naum,"-1"))) then



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.032 c
14-1109577493
Чеширский_Кот
2005-02-28 10:58
2005.03.20
Михаил Боярский


1-1110110083
вопрос
2005-03-06 14:54
2005.03.20
распознание выполнения события формы


3-1108471937
Mishenka
2005-02-15 15:52
2005.03.20
Сортировка набора данных


14-1109524986
ve7al
2005-02-27 20:23
2005.03.20
Язык программирования Паскаль


1-1109868008
ТехникПТО
2005-03-03 19:40
2005.03.20
Скорость работы программы во время выполнения цикла




   Наверх