Форум: "Базы";
Текущий архив: 2005.03.20;
Скачать: [xml.tar.bz2];
Вниз
В триггере узнать какие поля обновились Найти похожие ветки
← →
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 вся ветка
Форум: "Базы";
Текущий архив: 2005.03.20;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.038 c