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 结果:
原文地址:https://www.cnblogs.com/xwb583312435/p/9055963.html
时间: 2024-10-09 07:35:29