Oracle 编译器流程
我不熟悉数据库编程语言。当我读关键词时,比如Oracle 编译器流程,oracle,plsql,Oracle,Plsql,我不熟悉数据库编程语言。当我读关键词时,比如 RAISE VALUE ERROR 我的理解是,编译器直接进入该事务的异常块 我的问题是,如果后面有一个块具有PRAGMA“autonomousion\u TRANSACTION”当编译器直接转到异常块时,该块如何执行 请您解释一下当使用诸如增值错误,自动交易等关键字时,流程是如何工作的 引发异常与执行GOTO语句完全相同:引发和异常块之间的任何代码都将被忽略 这个演示使用DBMS_输出来显示代码流 SQL> set serveroutput
RAISE VALUE ERROR
我的理解是,编译器直接进入该事务的异常块
我的问题是,如果后面有一个块具有PRAGMA“autonomousion\u TRANSACTION”
当编译器直接转到异常块时,该块如何执行
请您解释一下当使用诸如
增值错误
,自动交易
等关键字时,流程是如何工作的 引发异常与执行GOTO语句完全相同:引发和异常块之间的任何代码都将被忽略
这个演示使用DBMS_输出来显示代码流
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>
SQL>打开服务器输出
SQL>get auto_txn_demo.SQL
1开始
2 dbms_output.put_行(“即将引发异常”);
3升值误差;
4 dbms_output.put_line('即将执行匿名块');
5 >
6申报
7程序自动运行
8布拉格自治区交易;
9开始
10 dbms_output.put_line(“执行自治事务”);
11承诺;
12端自动_txn;
13开始
14 dbms_output.put_line('即将调用private proc');
15自动xn;
16端;
17例外情况
18当值_出现错误时
19 dbms_output.put_行(“处理异常”);
20*结束;
21
22 /
即将引发异常
处理异常
PL/SQL过程已成功完成。
SQL>
引发异常与执行GOTO语句完全相同:引发和异常块之间的任何代码都将被忽略
这个演示使用DBMS_输出来显示代码流
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>
SQL>打开服务器输出
SQL>get auto_txn_demo.SQL
1开始
2 dbms_output.put_行(“即将引发异常”);
3升值误差;
4 dbms_output.put_line('即将执行匿名块');
5 >
6申报
7程序自动运行
8布拉格自治区交易;
9开始
10 dbms_output.put_line(“执行自治事务”);
11承诺;
12端自动_txn;
13开始
14 dbms_output.put_line('即将调用private proc');
15自动xn;
16端;
17例外情况
18当值_出现错误时
19 dbms_output.put_行(“处理异常”);
20*结束;
21
22 /
即将引发异常
处理异常
PL/SQL过程已成功完成。
SQL>
引发异常与执行GOTO语句完全相同:引发和异常块之间的任何代码都将被忽略
这个演示使用DBMS_输出来显示代码流
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>
SQL>打开服务器输出
SQL>get auto_txn_demo.SQL
1开始
2 dbms_output.put_行(“即将引发异常”);
3升值误差;
4 dbms_output.put_line('即将执行匿名块');
5 >
6申报
7程序自动运行
8布拉格自治区交易;
9开始
10 dbms_output.put_line(“执行自治事务”);
11承诺;
12端自动_txn;
13开始
14 dbms_output.put_line('即将调用private proc');
15自动xn;
16端;
17例外情况
18当值_出现错误时
19 dbms_output.put_行(“处理异常”);
20*结束;
21
22 /
即将引发异常
处理异常
PL/SQL过程已成功完成。
SQL>
引发异常与执行GOTO语句完全相同:引发和异常块之间的任何代码都将被忽略
这个演示使用DBMS_输出来显示代码流
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>
SQL>打开服务器输出
SQL>get auto_txn_demo.SQL
1开始
2 dbms_output.put_行(“即将引发异常”);
3升值误差;
4 dbms_output.put_line('即将执行匿名块');
5 >
6申报
7程序自动运行
8布拉格自治区交易;
9开始
10 dbms_output.put_line(“执行自治事务”);
11承诺;
12端自动_txn;
13开始
14 dbms_output.put_line('即将调用private proc');
15自动xn;
16端;
17例外情况
18当值_出现错误时
19 dbms_output.put_行(“处理异常”);
20*结束;
21
22 /
即将引发异常
处理异常
PL/SQL过程已成功完成。
SQL>