oracle存储过程异常捕获

来源:互联网 发布:明星二手衣店淘宝网址 编辑:程序博客网 时间:2024/05/21 10:20

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 结果:






1 0