oracle的自治事務

2021-08-25 23:42:08 字數 746 閱讀 2474

create or replace procedure testa

(a varchar2,

b varchar2)is

vs_str varchar2(10);

begin

insert into test_table_t values(a);

vs_str := b;

testb(bs_str);

rollback;

end;

--將過程testb(msg varchar2)定義為自治事務:

create or replace procedure testb(msg varchar2)

is

pragma autonomous_transaction;

begin

insert into test_table_t values(msg);

commit;

end;

這樣,test_table_t中之前testa過程寫入的資料就會因為testa過程的rollback而回滾掉。而因為testa呼叫了被定義為自治事務的testb,而且testb也向表test_table_t中寫入了資料b並做了commit操作。

那麼,testa的rollback對testb寫入的資料就沒有影響,而且testb的commit對testa的rollback也不會有影響。表test_table_t中會保留資料b。

自治事務參考

在觸發器中操作觸發此觸發器的表,用 pragma autonomous transaction 選項。自治事務理解 一般情況下利用觸發器禁止某些對錶的更新等操作時,若記錄日誌,則觸發器最後丟擲異常時會造成日誌回滾。利用自治事務可防止此點。對資料庫有寫操作 insert update delete c...

觸發器 自治事務

原帖位址 問題如下 表 ksource.userinfo 發生了變化,觸發器 函式不能讀它 userinfo userid,username,departid,serialnum,對於乙個部門 departid相同 下的使用者,我要讓其序號serialnum保持連續,就建立了乙個觸發器 引用 cre...

Seata 乙個簡單可擴充套件自治事務架構

乙個高效能,易於上手的,用於微服務架構的分布式事務解決方案。微服務中的分布式事務問題傳統的單體應用,它的業務元件通常有3個模組。它使用乙個單體的本地資料來源,通常地,使用本地事務保證資料一致性。在微服務中就會變得不一樣了,上面提到的3個模組將拆分成3個不同的資料來源。每個單體的服務自然可以使用本地事...