標籤:sqlplus SQ out varchar 變數 col cep begin lag
oracle預存程序異常捕獲學習,執行及示範過程:
預存程序:
CREATE OR REPLACE PROCEDURE sp_test_2 ( param1 in int, --輸入參數 param2 in int, out_return out varchar2 --返回結果 ) is --全域變數 val int; errorException exception; --申明異常 errorCode number; --異常代號 errorMsg varchar2(1000); --異常資訊 flag varchar2(10); begin flag := ‘true‘; out_return := ‘flag=‘ || flag || ‘,errorCode=‘ || errorCode || ‘,errorMsg=‘ || errorMsg; val := param1/param2; --/* exception when errorException then errorCode := SQLCODE; errorMsg := SUBSTR(SQLERRM, 1, 200); flag := ‘false‘; out_return := ‘flag=‘ || flag || ‘,errorCode=‘ || errorCode || ‘,errorMsg=‘ || errorMsg; when others then errorCode := SQLCODE; errorMsg := SUBSTR(SQLERRM, 1, 200); flag := ‘false‘; out_return := ‘flag=‘ || flag || ‘,errorCode=‘ || errorCode || ‘,errorMsg=‘ || errorMsg; --dbms_output.put_line(errorCode || ‘,‘ || errorMsg); --*/ end sp_test_2;
示範預存程序:
DECLARE out_return varchar2(1000); val int; --全域變數 errorException exception; --申明異常 errorCode number; --異常編碼 errorMsg varchar2(1000); --異常資訊 flag varchar2(10); begin flag := ‘true‘; out_return := ‘flag=‘ || flag || ‘,errorCode=‘ || errorCode || ‘,errorMsg=‘ || errorMsg; val := 1/0; exception --異常捕捉,不要把有需要的代碼放在異常捕捉後面,有異常才會執行異常代碼下所有代碼,沒有異常不會執行 when errorException then errorCode := SQLCODE; errorMsg := SUBSTR(SQLERRM, 1, 200); flag := ‘false‘; out_return := ‘flag=‘ || flag || ‘,errorCode=‘ || errorCode || ‘,errorMsg=‘ || errorMsg; when others then errorCode := SQLCODE; errorMsg := SUBSTR(SQLERRM, 1, 200); flag := ‘false‘; out_return := ‘flag=‘ || flag || ‘,errorCode=‘ || errorCode || ‘,errorMsg=‘ || errorMsg; dbms_output.put_line(out_return); end;
sqlplus中執行預存程序:
DECLARE out_return varchar2(1000); begin sp_test_2(1,0,out_return); dbms_output.put_line(out_return); --列印結果 end;
執行預存程序 1除以0 結果:
oracle預存程序異常捕獲