我有一個看起來很基本的快速問題,但我想在回答我的同事之前先確定一下。
在 Oracle PL/SQL 觸發器中,當在“更新后”觸發器中觸發例外時,正在更新的行是否會因為“更新后而不是之前”行為的事實而回滾?
或者觸發時間(之前或之后),觸發器將在任何expcetion恢復?
先感謝您 !
uj5u.com熱心網友回復:
檔案說:
在大多數情況下,如果觸發器運行引發例外的陳述句,并且例外未由例外處理程式處理,則資料庫將回滾觸發器及其觸發陳述句的影響。
...
使用行級觸發器很容易測驗發生了什么:
create trigger t42_trig
after update on t42
for each row
begin
raise_application_error(-20000, 'Nope');
end;
/
update t42 set value = 'Updated' where id = 42;
ORA-20000: Nope
ORA-06512: at "MY_SCHEMA.T42_TRIG", line 2
ORA-04088: error during execution of trigger 'FIDDLE_IIIJPEHAHWSVOWUBIPKE.T42_TRIG'
select * from t42;
ID | 價值 |
---|---|
42 | 原來的 |
...或使用陳述句級觸發器;
create trigger t42_trig
after update on t42
begin
raise_application_error(-20000, 'Nope');
end;
/
update t42 set value = 'Updated' where id = 42;
ORA-20000: Nope
ORA-06512: at "MY_SCHEMA.T42_TRIG", line 2
ORA-04088: error during execution of trigger 'FIDDLE_IIIJPEHAHWSVOWUBIPKE.T42_TRIG'
select * from t42;
ID | 價值 |
---|---|
42 | 原來的 |
小提琴
uj5u.com熱心網友回復:
沒錯,這就是我在像你一樣運行我的測驗時的行為(始終保留原始值)。我只是想確定一下,我想我已經得到了我正在尋找的答案。感謝@Alex 的快速回復。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/530928.html
標籤:甲骨文plsql触发器
上一篇:加密資料庫或程式中的資料