一般會有以下三種方式 :
1) 利用 Exit, 但只有結束目前的迴圈, 然後會繼續該 Procedure/Trigger 的執行;
若是 Oracle ERP 的 request, 其執行 Status 會是 Normal.
2) 利用 Return, 但只有結束目前的 PL/SQL Block, 然後會繼續下一個 Procedure/Trigger;
若是 Oracle ERP 的 request, 其執行 Status 會是 Normal.
3) 利用 Raise_Application_Error, 且是整個程式都中斷;
若是 Oracle ERP 的 request, 其執行 Status 會是 Error.
範例 1
declare procedure tom1 is begin dbms_output.put_line( 'Tom Test1 Start' ); for i in 1..5 loop dbms_output.put_line( 'i:' || i ); if i = 2 then exit; end if; end loop; dbms_output.put_line( 'Tom Test1 End' ); dbms_output.put_line( '----------' ); end; procedure tom2 is begin dbms_output.put_line( 'Tom Test2 Start' ); dbms_output.put_line( 'Tom Test2 End' ); dbms_output.put_line( '----------' ); end; begin tom1; tom2; begin dbms_output.put_line( 'Tom Test3 Start' ); dbms_output.put_line( 'Tom Test3 End' ); end; end; / -- 執行結果 Tom Test1 Start i:1 i:2 Tom Test1 End ---------- Tom Test2 Start Tom Test2 End ---------- Tom Test3 Start Tom Test3 End
範例 2
declare procedure tom1 is begin dbms_output.put_line( 'Tom Test1 Start' ); for i in 1..5 loop dbms_output.put_line( 'i:' || i ); if i = 2 then return; end if; end loop; dbms_output.put_line( 'Tom Test1 End' ); dbms_output.put_line( '----------' ); end; procedure tom2 is begin dbms_output.put_line( 'Tom Test2 Start' ); dbms_output.put_line( 'Tom Test2 End' ); dbms_output.put_line( '----------' ); end; begin tom1; tom2; begin dbms_output.put_line( 'Tom Test3 Start' ); dbms_output.put_line( 'Tom Test3 End' ); end; end; / -- 執行結果 Tom Test1 Start i:1 i:2 Tom Test2 Start Tom Test2 End ---------- Tom Test3 Start Tom Test3 End
範例 3
declare procedure tom1 is begin dbms_output.put_line( 'Tom Test1 Start' ); for i in 1..5 loop dbms_output.put_line( 'i:' || i ); if i = 2 then raise_application_error( -20001, 'Hello Error' ); end if; end loop; dbms_output.put_line( 'Tom Test1 End' ); dbms_output.put_line( '----------' ); end; procedure tom2 is begin dbms_output.put_line( 'Tom Test2 Start' ); dbms_output.put_line( 'Tom Test2 End' ); dbms_output.put_line( '----------' ); end; begin tom1; tom2; begin dbms_output.put_line( 'Tom Test3 Start' ); dbms_output.put_line( 'Tom Test3 End' ); end; end; / -- 執行結果 Tom Test1 Start i:1 i:2 錯誤報告 - ORA-20001: Hello Error ORA-06512: 在 line 9 ORA-06512: 在 line 24
以上, 提供參考囉 ^^.