2014-03-06 46 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这是不存在的。这是错误的原因。