Oracle PL/SQL 中斷程式執行且產生錯誤訊息

在 Oracle PL/SQL 要中斷程式執行,

一般會有以下三種方式 :

1) 利用 Exit, 但只有結束目前的迴圈, 然後會繼續該 Procedure/Trigger 的執行;

若是 Oracle ERPrequest, 其執行 Status 會是 Normal.

2) 利用 Return, 但只有結束目前的 PL/SQL Block, 然後會繼續下一個 Procedure/Trigger;

若是 Oracle ERPrequest, 其執行 Status 會是 Normal.

3) 利用 Raise_Application_Error, 且是整個程式都中斷;

若是 Oracle ERPrequest, 其執行 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

以上, 提供參考囉 ^^.

Related Posts Plugin for WordPress, Blogger...