具有If语句和OR条件的Oracle触发器

时间:2014-01-19 07:52:55

标签: sql oracle triggers

我正试图让oracle触发器工作。

这是我到目前为止的代码:

CREATE OR REPLACE TRIGGER CHK_SALES_JOB 
BEFORE INSERT OR UPDATE OF JOB_ID ON EMPLOYEES 
FOR EACH ROW
BEGIN
  IF :old.department_id = 80 AND (:new.job_id != 'SA_REP' OR :new.job_id != 'SA_MAN') THEN 
      RAISE_APPLICATION_ERROR(-20001, 'Sales Department can only have SA_MAN or SA_REP');
  END IF;
END;

这是更新声明:

UPDATE employees
SET job_id = 'SA_REP'
WHERE employee_id = 179;

我现在面临的问题是,使用if语句,它只会像这样工作:

IF :old.department_id = 80 AND :new.job_id != 'SA_REP' THEN 
    RAISE_APPLICATION_ERROR(-20001, 'Sales Department can only have SA_MAN or SA_REP');
END IF;

如果我在If语句中有OR条件,代码将永远不会工作。它会毫无问题地编译触发器,但是当我尝试更新employees表时,它会不断显示RAISE_APPLICATION_ERROR。

无论如何我可以解决这个问题吗?

提前致谢

1 个答案:

答案 0 :(得分:7)

将OR替换为NOT IN:

CREATE OR REPLACE TRIGGER CHK_SALES_JOB 
BEFORE INSERT OR UPDATE OF JOB_ID ON EMPLOYEES 
FOR EACH ROW
BEGIN
  IF :old.department_id = 80 AND :new.job_id NOT IN ('SA_REP', 'SA_MAN') THEN 
      RAISE_APPLICATION_ERROR(-20001, 'Sales Department can only have SA_MAN or SA_REP');
  END IF;
END;
相关问题