このトランザクションは、メイントランザクションと独立しているので、サブプロシージャないの処理を確実にコミットすることができます。
PL/SQLでログテーブルに書き込むときなどに使えるのではないでしょうか。
例
この無名PL/SQLは、innerサブプロシージャが自律型のトランザクションとなっています。自律型トランザクション部分のtest1へのinsert処理は必ずコミットされます。
メイントランザクションではロールバックされるので、testへのinsertは取り消されます。
declare procedure inner is PRAGMA AUTONOMOUS_TRANSACTION; begin insert into test1 values ('1'); commit; end; begin insert into test values ('1'); inner; rollback; end; /
実行前
test、test1ともテーブルは空です。10:22:39 SQL> select * from test; no rows selected Elapsed: 00:00:00.00 10:27:56 SQL> select * from test1; no rows selected
実行
10:27:43 SQL> r 1 declare 2 procedure inner 3 is 4 PRAGMA AUTONOMOUS_TRANSACTION; 5 begin 6 insert into test1 values ('1'); 7 commit; 8 end; 9 begin 10 insert into test values ('1'); 11 inner; 12 rollback; 13* end; PL/SQL procedure successfully completed. Elapsed: 00:00:00.04 10:28:07 SQL>
実行後
自律型トランザクションのtest1だけinsertされていることがわかる。10:28:01 SQL> select * from test; no rows selected Elapsed: 00:00:00.00 10:28:21 SQL> select * from test1; C - 1 Elapsed: 00:00:00.00 10:28:25 SQL>