更新行时触发器很奇怪

时间:2014-11-15 07:14:47

标签: sql plsql triggers oracle-sqldeveloper

我有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_pctSA_REP时向我显示SA_MAN此外,更新时不是commission_pctSA_REP的员工的SA_MAN,它会更新并且触发器不会停止。 我该怎么办?我有语法错误?我正在使用SQL Developer。非常感谢你。

1 个答案:

答案 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