触发错误ORA-04092 ORA-04088

时间:2010-02-15 08:21:56

标签: sql oracle triggers ora-04088

我创建了一个触发器,如下所示:

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'

请帮帮忙吗?

3 个答案:

答案 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创建一个程序。