编译器的流程

时间:2013-12-16 07:04:32

标签: oracle plsql

我是数据库编程语言的新手。当我正在阅读像

这样的关键词
RAISE VALUE ERROR

我的理解是编译器直接进入该事务的异常块。

我的问题是,如果在PRAGMA 'Autonomous_TRANSACTION'后面有一个块,当编译器直接进入异常块时块是如何执行的。

如果使用RAISE VALUE ERRORAUTONOUMOUS_TRANSACTION等关键词,请解释一下流量的工作原理。

1 个答案:

答案 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>