create or replace TRIGGER lening_bri
BEFORE
update on lening
for each row
begin
if :old.terugbetaald = 'N' and :new.terugbetaald = 'Y' then
:new.datumterugbetaald := sysdate;
end if;
if :old.terugbetaald = 'Y' and :new.terugbetaald = 'N' then
:new.datumterugbetaald := NULL;
end if;
if :old.terugbetaald = 'N' and :new.terugbetaald = 'Y' then
:new.datumterugbetaald := sysdate;
end if;
if old.datumterugbetaald := NULL and :new.datumterugbetaald := NOT NULL then
:new.terugbetaald := 'Y'
end if;
if :old.datumterugbetaald := NOT NULL and :new.datumterugbetaald := NULL then
:new.terugbetaald := 'N'
end if;
end;
我无法编译它。我每次都会收到此错误:
PLS-00103: Encountered the symbol "=" when expecting one of the following: . ( * @ % & = - + < / > at in is mod remainder not rem then <an exponent (**)> <> or != or ~= >= <= <> and or like like2 like4 likec between || multiset member submultiset
对于最后两个if语句,它必须执行以下操作:
答案 0 :(得分:1)
最后两个if
语句正在使用:=
赋值运算符,而不是=
等式运算符。 old
引用之一也缺少其前导冒号,并且您缺少了几个语句结尾的分号。
但是您不能将空值与相等性检查进行比较,而必须使用there are dedicated operators。
所以这些应该是:
if :old.datumterugbetaald IS NULL and :new.datumterugbetaald IS NOT NULL then
:new.terugbetaald := 'Y';
end if;
if :old.datumterugbetaald IS NOT NULL and :new.datumterugbetaald IS NULL then
:new.terugbetaald := 'N';
end if;
如果if
都不为true,则还需要考虑将该列设置为什么-如果您要检查的列过去是并且保持为空,或者过去是并且保持不为零(包括它更改了值) )。
前三项检查也是如此;而且您的第一张和第三张支票似乎是相同的。