甲骨文 11.1
我有自定義日志記錄表,我在其中插入資料:
CREATE TABLE log_table
(
message VARCHAR2(255),
created_by VARCHAR2(40) NOT NULL,
created_at DATE NOT NULL,
);
我有一個在特定表上運行的觸發器,它會進行一些檢查。我的問題是:當觸發器失敗時,我希望能夠將一些資料記錄到log_table.
扳機:
CREATE OR REPLACE TRIGGER my_trigger
FOR INSERT OR UPDATE OF column
ON my_table
COMPOUND TRIGGER
BEFORE STATEMENT IS
BEGIN
// code
END BEFORE STATEMENT;
BEFORE EACH ROW IS
BEGIN
IF (/*condition for failing*/) THEN
EXECUTE IMMEDIATE 'INSERT INTO mesaj_ama VALUES (:my_message, :my_user, :my_data)'
USING 'custom error message', SYS.LOGIN_USER, SYSDATE;
RAISE_APPLICATION_ERROR(-20001, 'some error');
END IF;
END BEFORE EACH ROW;
END my_trigger;
/
以下代碼不起作用。我嘗試使用EXECUTE IMMEDIATE可能來強制它,但沒有奏效。我知道如果出現錯誤,會自動進行表回滾(這意味著INSERT命令被取消),但我需要一種方法來做到這一點。有什么幫助嗎?
uj5u.com熱心網友回復:
您正在尋找的概念是Autonomous Trasnaction,例如
CREATE OR REPLACE TRIGGER log_sal
BEFORE UPDATE OF salary ON emp FOR EACH ROW
DECLARE
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
INSERT INTO log (
log_id,
up_date,
new_sal,
old_sal
)
VALUES (
:old.employee_id,
SYSDATE,
:new.salary,
:old.salary
);
COMMIT;
END;
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/421772.html
標籤:
