Как проверить, обновляется ли столбец - PullRequest
0 голосов
/ 07 мая 2018

Предположим, у меня есть инструкция, которая делает следующее:

update client set active = 0;

Есть ли способ сделать это в Firebird, то же самое, что делает Oracle ...

if updating (active) ...

Триггер будет выполняться только в том случае, если он только обновляет столбец «active».

Я пробовал таким образом, но он не работает:

CREATE OR ALTER TRIGGER CLIENT_SYNC FOR CLIENT
ACTIVE BEFORE INSERT OR UPDATE POSITION 0
as begin   
    IF UPDATE(ACTIVE)   
        new.ACTIVE = NULL;
end;

1 Ответ

0 голосов
/ 07 мая 2018

У Firebird нет ничего похожего на updating. Вам необходимо сравнить предыдущее значение (в контекстной переменной old) с новым значением (в контекстной переменной new), предпочтительно используя is distinct from, чтобы избежать проблем с null:

set term #;
CREATE OR ALTER TRIGGER CLIENT_SYNC FOR CLIENT
ACTIVE BEFORE INSERT OR UPDATE POSITION 0
as 
begin   
    IF (old.active is distinct from new.active) then  
        new.ACTIVE = NULL;
end#
set term ;#

Обновление путем установки new.ACTIVE = null кажется немного странным в контексте, но я предполагаю, что это просто заполнитель (в противном случае ACTIVE никогда не может быть ничем иным, кроме null).

И обязательно ознакомьтесь с документацией Firebird по процедурному SQL , так как в вашем коде есть несколько других синтаксических ошибок.

...