【发布时间】:2016-12-03 05:37:12
【问题描述】:
我已运行此代码来创建此触发器,因为我需要使用插入到 TABLE1 中的具有相同序列号的行的 UID 值来更新 TABLE2。
CREATE OR REPLACE TRIGGER TRIG_NAME BEFORE INSERT ON TABLE1 FOR EACH ROW
DECLARE
seq NUMBER(10);
uid CHAR(36);
BEGIN
seq := :new.SEQ;
uid := :new.UID;
UPDATE TABLE2 SET TABLE2.UID = uid WHERE TABLE2.SEQ = seq;
DBMS_OUTPUT.put_line('UPDATE TABLE2 SET UID = '||uid||' WHERE SEQ = '||seq||';');
END;
触发器似乎创建没有问题,所以我
SET SERVEROUTPUT ON;
然后
INSERT INTO TABLE1 (SEQ, UID) VALUES (47, 'TEST_VALUE');
得到预期的输出
UPDATE TABLE2 SET UID = TEST_VALUE WHERE SEQ = 47;
因此,正确的值似乎进入了触发器。然后我通过运行检查 TABLE2
SELECT SEQ,UID FROM TABLE2 WHERE SEQ = 47;
得到
SEQ UID
--- ------------------------------------
47
1 row selected.
有人知道我哪里出错了吗?
【问题讨论】:
-
您是否进行了回滚,即您是否忘记提交?
-
同一个会话。不过,为了确定,我后来尝试过运行 COMMIT。