本文主要是介绍在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(二)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!