2014-01-19 4 views
2

Я пытаюсь запустить триггер oracle.Oracle Trigger with If Statement AND OR conditions

Вот код, который я до сих пор:

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 :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, код никогда не будет Работа. Он скомпилирует триггер без проблем, но когда я попытаюсь обновить таблицу сотрудников, он будет постоянно отображать RAISE_APPLICATION_ERROR.

В любом случае, я могу это исправить?

Заранее спасибо

ответ

5

Replace ИЛИ с НЕ В:

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; 
+0

Большое вам спасибо за вашу помощь. НЕ работает. – fireboy0526

+0

Возможно, было проще просто заменить 'или'' и '. –

+1

Почему '' или 'не работает? –