我是数据库编程语言的新手。当我正在阅读像
这样的关键词RAISE VALUE ERROR
我的理解是编译器直接进入该事务的异常块。
我的问题是,如果在PRAGMA 'Autonomous_TRANSACTION'
后面有一个块,当编译器直接进入异常块时块是如何执行的。
如果使用RAISE VALUE ERROR
,AUTONOUMOUS_TRANSACTION
等关键词,请解释一下流量的工作原理。
答案 0 :(得分:3)
引发异常与执行GOTO语句完全相同:忽略RAISE和EXCEPTION块之间的任何代码。
此演示使用DBMS_OUTPUT显示代码流...
SQL> set serveroutput on
SQL> get auto_txn_demo.sql
1 begin
2 dbms_output.put_line('about to raise exception');
3 raise value_error;
4 dbms_output.put_line('about to execute anonymous block');
5 << anon_block >>
6 declare
7 procedure auto_txn is
8 pragma autonomous_transaction;
9 begin
10 dbms_output.put_line('executing autonomous transaction');
11 commit;
12 end auto_txn;
13 begin
14 dbms_output.put_line('about to call private proc');
15 auto_txn;
16 end;
17 exception
18 when value_error then
19 dbms_output.put_line('handling exception');
20* end;
21
22 /
about to raise exception
handling exception
PL/SQL procedure successfully completed.
SQL>