1

以下のようなトリガーを作成しました。

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'

誰か助けてくれませんか?

4

3 に答える 3

6

取り除くだけ

COMMIT;

トリガーコードから。進行中のトランザクションで実行をトリガーするため、別のコミットを行うことはできません。トランザクションがコミットされると、trigger_2 への挿入もコミットされます。

于 2010-02-15T08:24:50.713 に答える
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;
于 2010-02-15T08:57:12.620 に答える
0

本当にコミットする必要がある場合(必要がない場合もありますが、念のため...)、AUTONOMOUS_TRANSACTIONPRAGMAを使用してプロシージャを作成できます。

于 2010-02-15T09:29:17.390 に答える