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