Oracle触发器语法

时间:2014-03-06 16:02:05

标签: sql 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语句应该以某种方式工作吗?

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:0)

我猜这一行

DEPT_ID = DEPT_ID - :NEW.DEPT_ID

生成一些不存在的DEPT_ID。这是错误的原因。