2013-12-16 52 views
0

我是數據庫編程語言的新手。當我經歷的關鍵詞一樣編譯器的流程

RAISE VALUE ERROR 

我明白了什麼是編譯器直接進入到交易的異常塊。

我的問題是如果它後面有一個塊,PRAGMA 'Autonomous_TRANSACTION'當編譯器直接進入異常塊時該塊如何執行。

您能否解釋當使用關鍵詞如RAISE VALUE ERROR,AUTONOUMOUS_TRANSACTION時流程是如何工作的。

回答

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>