Ошибки запуска ORA-04092 ORA-04088 - PullRequest
       23

Ошибки запуска ORA-04092 ORA-04088

1 голос
/ 15 февраля 2010

Я создал триггер, как показано ниже:

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;

Я пытаюсь вставить строку в триггер_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 ]

6 голосов
/ 15 февраля 2010

Просто удалите

COMMIT;

из кода триггера. Триггер выполняется в текущей транзакции, поэтому вы не можете сделать отдельный коммит. Когда транзакция фиксируется, ваша вставка в триггере 2 также будет зафиксирована.

2 голосов
/ 15 февраля 2010

Могу предложить немного его укоротить.

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;
0 голосов
/ 15 февраля 2010

В случае, если вам действительно нужно зафиксировать (скорее всего, вам не нужно, но на всякий случай ...), вы можете создать процедуру с помощью AUTONOMOUS_TRANSACTION PRAGMA.

...