我有trigger
一次更新row
。但我在做更新时遇到了一些奇怪的问题。
当我尝试在commission_pct
中添加更大的值时,触发器会显示另一个错误,而不是我输入的错误。
end if; --The errors are in the next sentences
ELSIF UPDATING ('COMMISSION_PCT') THEN
if (:NEW.commission_pct <> 0 and (:OLD.job_id <> 'SA_REP') or (:OLD.job_id <> 'SA_MAN')) then
raise_application_error(-20002, 'You cannot have commission');
end if; -- When testing, SQL Developer says here is an error
在测试更新commission_pct
部分时,它会在尝试将error -20002
提升为commission_pct
或SA_REP
时向我显示SA_MAN
此外,更新时不是commission_pct
或SA_REP
的员工的SA_MAN
,它会更新并且触发器不会停止。
我该怎么办?我有语法错误?我正在使用SQL Developer
。非常感谢你。
答案 0 :(得分:0)
条件运算符可能存在问题(AND的优先级高于OR)
if (:NEW.commission_pct <> 0 and (:OLD.job_id <> 'SA_REP') or (:OLD.job_id <> 'SA_MAN')) then
也许你想要这个:
if :NEW.commission_pct <> 0 and :OLD.job_id <> 'SA_REP' and :OLD.job_id <> 'SA_MAN' then
或者
if :NEW.commission_pct <> 0 and :OLD.job_id not in ('SA_REP', 'SA_MAN') then