我创建了一个触发器,如下所示:
CREATE OR REPLACE TRIGGER trigger_test
AFTER INSERT ON trigger_1
FOR EACH ROW
DECLARE
t_identifier VARCHAR2(10);
t_name VARCHAR2(20);
BEGIN
t_identifier := (:NEW.IDENTIFIER);
t_name := (:NEW.NAME);
INSERT INTO trigger_2(IDENTIFIER,NAME)VALUES(t_identifier,t_name);
COMMIT;
END;
我想在trigger_1
中插入一行INSERT INTO trigger_1(IDENTIFIER,NAME)
VALUES('1234567','Vijay');
它给了我错误:
ORA-04092: cannot COMMIT in a trigger
ORA-06512: at "LVSDBO46.TRIGGER_TEST", line 8
ORA-04088: error during execution of trigger 'LVSDBO46.TRIGGER_TEST'
请帮帮忙吗?
答案 0 :(得分:6)
只需删除
COMMIT;
来自触发码。触发器在正在进行的事务中执行,因此您无法单独提交。提交事务时,您在trigger_2中的插入也将被提交。
答案 1 :(得分:2)
我可能会建议缩短它。
CREATE OR REPLACE TRIGGER trigger_test
AFTER INSERT ON trigger_1
FOR EACH ROW
BEGIN
INSERT INTO trigger_2 (IDENTIFIER,NAME) VALUES (:NEW.IDENTIFIER,:NEW.NAME);
END;
答案 2 :(得分:0)
如果你真的需要提交(很可能你没有,但以防万一......)你可以使用AUTONOMOUS_TRANSACTION PRAGMA创建一个程序。