У тригері дізнатися які поля оновилися

Є тригер Before Insert для деякої таблиці. У ньому треба визначити чи не змінилося поле field1.

Як це зробити правильно?

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

Ця конструкція добре працює, але якщо старе або нове значення is null, тоді не хоче.

> Але якщо старе або нове значення is null, тоді не хоче.

Хм. А перевірити це умова в тригер релігія не дозволяє?

Яка ще релігія?
Більш детально:
1.
# XA0; // new.filed1 = "привіт";
# XA0; // old.filed1 = "поки";
# XA0; if (new.field1 <> old.field1) then
# XA0; begin
# XA0; # XA0; // в цьому випадку потрапляємо в цей блок
# XA0; end

2.
# XA0; // new.filed1 = "привіт";
# XA0; // old.filed1 = null;
# XA0; if (new.field1 <> old.field1) then
# XA0; begin
# XA0; # XA0; // в цьому випадку сюди НЕ потрапляємо.
# XA0; # XA0; // хоча повинні
# XA0; end

3.
# XA0; // new.filed1 = null;
# XA0; // old.filed1 = "поки";
# XA0; if (new.field1 <> old.field1) then
# XA0; begin
# XA0; # XA0; // в цьому випадку теж сюди НЕ потрапляємо.
# XA0; # XA0; // хоча повинні
# XA0; end

Я підозрюю не можна порівнювати null зі значенням будь-якого типу, тому що перевірка на null виконується конструкцією is null.

Тому і питаю як дізнатися, що поле змінило значення, незалежно від того яке воно було і яке стало (включаю null-значення).

Йдеться про перевірку на null:
# XA0; 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

[2] Sour # XA0; (18.02.05 11:25)
> Я підозрюю не можна порівнювати null зі значенням будь-якого типу, тому що перевірка на null виконується конструкцією is null.

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

1)
if
# XA0; (new.field1 IS NULL) AND NOT (old.field1 IS NULL) OR
# XA0; NOT (new.field1 IS NULL) AND (old.field1 IS NULL) OR
# XA0; (new.field1 <> old.field1)
then
# XA0; змінилося

2)
if
# XA0; NOT (
# XA0; # XA0; (new.field1 IS NULL) AND (old.field1 IS NULL) OR
# XA0; # XA0; (new.field1 = old.field1)
# XA0;)
then
# XA0; змінилося

а якщо наприклад так?
if ((coalesce (old.naim, "- 1"))<>(Coalesce (new.naum, "- 1"))) then

Схожі статті