在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(二)相关推荐
- ORACLE中分钟用mm和mi 标示区别
oracle中的日期格式为: 坑之一:HH和HH24 12小时制:yyyy-MM-dd HH:mi:ss 24小时制:yyyy-MM-dd HH24:mi:ss 在java中HH和hh是区分12小时制 ...
- Oracle中删除用户和表空间的常见问题(比如:ORA-01940无法删除当前已连接用户的解决方案)
这时候以管理员身份进入sqlplus命令窗口. 在删除用户的时候有时候会出现以下问题: ORA-01940无法删除当前已连接用户 这时候的解决方案是: 1)查看用户的连接状况 select usern ...
- Oracle中的并行
Oracle中的并行 (一)Oracle中的并行 首先,Oracle会创建一个进程用于协调并行服务进程之间的信息传递,这个协调进程将需要操作的数据集(例如表的数据块)分割成很多部分,称为并行处理单元, ...
- oracle 存储过程 状态,查看ORACLE中正在运行的存储过程 | 学步园
1.如何查看ORACLE中正在运行的存储过程 select owner,name from v$db_object_cache where type like '%PROCE%' and locks ...
- oracle自增列问题i,关于oracle中自增列问题
昨天去面试,面试官文oracle中有没有自增列,平时没留意,今天查了一下资料,做了个例子. oracle中没有自增列,可以设定, 但手写方法.序列或触发器都可以实现,下面是我实现的一种方法 ----- ...
- C# 实现Oracle中的数据与Excel之间的转换
最近项目要求实现数据库之间数据在各个数据库之间导入导出,在此做个笔记 1. 将Oracle中的表导入到Excel中,反之亦然 private static readonly string connec ...
- Oracle中Hint深入理解(原创)
http://czmmiao.iteye.com/blog/1478465 Hint概述 基于代价的优化器是很聪明的,在绝大多数情况下它会选择正确的优化器,减轻了DBA的负担.但有时它也聪明反被聪明 ...
- mysql nextval同步锁_mysql中实现类似oracle中的nextval函数
我们知道mysql中是不支持sequence的,一般是建表的时间使这个字段自增. 如 create table table_name(id int auto_increment prima ...
- 从oracle中读取图片,Pb从oracle中读取和保存图片
Pb从oracle中读取和保存图片 (2008-12-12 12:23:20) 转载 分类:编程 标签: it //保存图片 //选择文件 string pname, fname integer va ...
最新文章
- Redisson 是如何实现分布式锁的?
- Quartz 框架快速入门(三)
- 亚马逊封号潮下,卖家们凭借这么做实现自救?速卖通和Lazada成为首选
- 五、数据对象和属性类型
- 12.14-Linux系统优化
- 基于matlab的prony方法实现,基于MATLAB的Prony方法实现
- centos可视化打开和修改文件(隐藏文件)
- LKT系列加密芯片DES加解密以及OpenSSL DES接口实现加解密
- Python 元组拆包
- 9个完整android开源app项目
- 小程序微信聊天功能中发送emoji表情
- QQ第三方登陆-极简版
- 实践练习二(必选):手动部署 OceanBase 三副本集群(在同一个节点)
- java物流管理系统_基于java的物流管理系统
- 如何创造一种团队文化
- 在win10基础上安装Ubuntu16.04双系统(双硬盘)
- Servlet规范之安全
- 炒股配资的杠杆是几倍?
- 台式计算机的选购标准,如何选购台式电脑机箱?小白装机选购电脑机箱知识指南(2)...
- HDMI上电信号分析