2014-03-06 47 views
0

我有一個關於我試圖在兩個表之間創建的觸發器的問題。當一個表更新時,另一個表也應該更新,但我似乎缺少正確的語法。Oracle觸發器語法

CREATE OR REPLACE TRIGGER TRIG_DEPT_ONUPDATE 
AFTER UPDATE OF DEPT_ID ON DEPARTMENT FOR EACH ROW 
BEGIN 
    UPDATE TEAM 
     SET DEPT_ID = :NEW.DEPT_ID 
     WHERE TEAM.DEPT_ID = :NEW.DEPT_ID; 
END; 
/

我得到更新錯誤( 「完整性約束(%s%S)違反 - 子記錄找到。」),但使用的代碼:

CREATE OR REPLACE TRIGGER TRIG_DEPT_ONUPDATE 
AFTER UPDATE OF DEPT_ID ON DEPARTMENT FOR EACH ROW 
BEGIN 
    UPDATE TEAM 
     SET DEPT_ID = :NEW.DEPT_ID; 
END; 
/

之後的變化,每單排更新,但只有少數需要更改。 If語句應該以某種方式工作?

+0

沒有Oracle 4.0.0.13 –

回答

1

訪問新更新的行值,則需要一個行級觸發器不是一個語句級觸發器:

CREATE OR REPLACE TRIGGER TRIG_DEPT_ONUPDATE 
AFTER UPDATE OF DEPT_ID ON TEAM 
for each row 
BEGIN 
    UPDATE DEPARTMENT 
    SET DEPT_ID = :NEW.DEPT_ID 
    Where DEPT_ID = :OLD.DEPT_ID; 
END; 
+0

噢,在使用'For Each Row'時,這改變了我所有的行,但不是所需的行。 – Lahkra

+0

@ Lahkra我做了一個更新。 –

+0

感謝您的幫助,我仍然得到(「完整性約束(%s。%s)違反 - 發現兒童記錄」),但更新後,我只是更新了其他表,它工作得很好! – Lahkra

0

我想這行

DEPT_ID = DEPT_ID - :NEW.DEPT_ID 

產生一些DEPT_ID這是不存在的。這是錯誤的原因。