在oracle中要谨慎使用when others then
Posted sxdtzhp
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在oracle中要谨慎使用when others then相关的知识,希望对你有一定的参考价值。
1、在oracle中when others then会吃掉所有的exception,一般不要使用,否则会掩盖软件的错误提示。
2、应使用精准异常捕获。
如果只是判断查不到数据时的处理,应该用when no_data_found then
返回多条数据应该用when too_many_rows then
违反唯一约束应该用when dup_val_on_index then
3、异常处理可以按任意次序排列,但 others 必须放在最后。
4、常见的错误写法
(1) exception
when others then
null;
end;
存在问题:无论发生什么错误都会忽略继续向下运行。
(2)exception
when others then
DBMS_OUTPUT.PUT_LINE(SQLCODE||'---'||SQLERRM);
end;
存在问题:无论发生什么错误都会忽略继续向下运行。如果执行了set serveroutput on只会在控制台打印SQLCODE||'---'||SQLERRM,调用方看不到任何错误提示。
(3)exception
when others then
po_flag := -1;
end;
存在问题:无论发生什么错误,只会把标记赋值为-1,忽略错误继续向下运行。如果需要返回应加return。
(4)exception
when others then
po_flag := -1;
insert into log...
end;
存在问题:调用方收到po_flag=-1后如果执行commit可能会导致事务不一致,如果执行rollback则insert into log...不会起作用。
5、when others then一般用在哪?
(1)判断日期格式合法性,如:
create or replace function isdate(mydate in varchar2)
return varchar2 is
tmp date;
begin
tmp:=to_date(mydate,'yyyymmdd');
return '1';
exception
when others then
return '0';
end isdate;
(2)自动执行的任务出错后记录日期
exception
when others then
rollback;
pro_logs(sqlcode,sqlerrm,....); --通过自治事务记录错误日期
return;
end;
以上是关于在oracle中要谨慎使用when others then的主要内容,如果未能解决你的问题,请参考以下文章
为啥我们需要在最后写 WHEN OTHERS THEN 异常 - Oracle PLSQL [关闭]
Oracle存储过程执行报错:无效的sql语句。 在plsql中: execute proc_test_exit_when;