我有一个关于我的触发器的问题,我正试图在两个表之间创建。当一个表更新时,另一个表也应该更新,但我似乎缺少正确的语法。
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 :(得分: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。这是错误的原因。