Oracle - TRIGGER, ОБНОВЛЯЮЩИЙ другую ТАБЛИЦУ - «оператор игнорируется» - PullRequest
0 голосов
/ 03 февраля 2020

Здравствуйте, я пишу триггер, который обновляет SCOTT.EMP.DEPTNO всякий раз, когда он изменяется в таблице SCOTT.DEPT.DEPTNO. Однако я подчеркнул UPDATE SCOT.EMP - «заявление игнорируется». Может ли кто-нибудь пролить свет на возможное решение или root проблемы, пожалуйста?

Триггер компилируется, но когда я смотрю внутрь триггера, утверждение подчеркивается.

create or replace TRIGGER Trigger1
BEFORE DELETE OR INSERT OR UPDATE OF DEPTNO ON SCOTT.DEPT  
FOR EACH ROW
BEGIN
     IF(:NEW.DEPTNO != :OLD.DEPTNO)
     THEN
        UPDATE SCOTT.EMP               ----- statement ignored
        SET DEPTNO = :NEW.DEPTNO
        WHERE SCOTT.EMP.DEPTNO = :OLD.DEPTNO;  
     END IF;
END;

1 Ответ

1 голос
/ 03 февраля 2020

Это странно, поэтому ответ был на УДАЛЕНИЕ всех триггеров, потому что я сделал 2 триггера в 2 схемах (System и SCOTT), я отбросил их, затем создал 1 в SCOTT, и он работает.

ALTER SESSION SET CURRENT_SCHEMA = SCOTT;

create or replace TRIGGER Trigger1
BEFORE DELETE OR INSERT OR UPDATE OF DEPTNO ON SCOTT.DEPT 
FOR EACH ROW
BEGIN
     IF(:NEW.DEPTNO != :OLD.DEPTNO)
     THEN
        UPDATE SCOTT.EMP 
        SET DEPTNO = :NEW.DEPTNO
        WHERE SCOTT.EMP.DEPTNO = :OLD.DEPTNO;  -- lub NEW w innym przypadku
     END IF;
END;
-----------------------------------------------------------------------------
UPDATE DEPT SET DEPTNO = 69 WHERE DNAME = 'SALES'; 
select * from dept
select * from emp
rollback;
...