PL/SQL异常处理学习之——如何编写健壮的程序
来源:互联网 发布:汉诺塔的非递归算法 编辑:程序博客网 时间:2024/05/18 01:15
程序中经常会出现写不友好的事情,导致程序瘫痪,所以我们有必要处理这些异常。下面我就来总结下PL/SQL异常处理需要知道的知识。
一、经常用到的内置PL/SQL异常
1、No_data_found:当select语句没有返回行时可能引发该异常。经常发生在用隐式游标执行SELECT INTO操作时。其异常代码为ORA-01403。
2、Too_many_rows:在只应该返回但行记录却返回多行记录时引发该异常。其异常代码为ORA-01422。
3、Dup_val_on_index:当视图把一条记录插入到一个表中,且这个表有一个主键,而插入记录的主键值在表中已存在时,引发该异常。其异常代码为ORA-00001。
4、Value_error:试图把一个值赋给一个变量且值与变量的数据类型不兼容时引发异常。或者把一个太大的值插入到一个已定义长度的字段时也会引发该异常。其异常代码为ORA-06502。
5、Zero_divide:试图以0作除数时引发该异常。异常代码为ORA-0146。
6、Others:该异常用于捕获那些指定异常处理不处理的所有异常,常放在异常处理的最后。其异常代码不确定。
二、如何自定义一个异常,示例如下:
Declare L_counter number :=0; L_name employee.employee_name%type; Cursor get_employee_name is Select employee_name From employee; --定义一个显式游标get_employee excep_old_friend Exception; --定义一个异常excep_old never_met_them Exception; --定义一个异常never_met_themBegin Open get_employee_name; -- 打开游标 Fetch get_employee_name into l_name; If l_name = 'Mr K' then Raise excep_old_friend; Else Raise excep_naver_met_them; End if; Close get_employee_name;--要记得关闭游标,不然会出现内存泄露等不良后果Exception When excep_old_friend then Dbms_output.put_line('I have a cat'); When excep_naver_met_them then Dbms_output.put_line(''I have a dog);End;
细心的读者应该已经发现,上面用到了一个词Raise,对,这个词很关键,因为它是异常引发的代码,也就是执行异常的代码。而需要注意的是要使用Raise引发异常,必须在Exception中有声明。
三、异常处理中使用到的伪劣sqlcode和sqlerrm
和rownum、rowid、sysdate等伪劣一样,sqlcode和sqlerrm是异常处理中用到的伪劣,它们的实质其实是函数。
程序中总是会出现很多的问题,有些你根本无法预测,这是我们可以使用这两个函数进行抓取异常。如下示例所示:
--省略部分代码Exception When excep_old_friend then Dbms_output.put_line('I have a cat'); When excep_naver_met_them then Dbms_output.put_line(''I have a dog); When Others then Dbms_output.put_line('Oracle Error:'||sqlcode); Dbms_output.put_line('Oracle error message is:'||sqlerrm);可以看到,通过Others的异常监控,我们可以得到未预测的反馈信息,好做处理。
阅读全文
0 0
- PL/SQL异常处理学习之——如何编写健壮的程序
- 如何编写健壮的程序
- 学习PL/SQL之六:处理异常
- PL/SQL编程学习之异常处理
- 【DB.PL/SQL】程序流程控制 —— 异常处理
- 如何编写 PL/SQL 程序
- PL/SQL之异常处理
- PL/SQL的异常处理
- Oracle学习笔记(二十九)——pl/sql的进阶之编写分页过程
- 编写健壮的PL/SQL代码(一):同字段同类型、%TYPE、SUBTYPE
- Oracle数据库之PL/SQL异常处理
- PL/SQL之五-异常处理
- PL/SQL之二 异常处理
- PL/SQL 异常处理
- PL/SQL异常处理
- PL/SQL异常处理
- PL/SQL异常处理
- PL/SQL 异常处理
- 打印楼梯
- 防火墙排错
- 编程机制
- bzoj 2839 集合计数
- vue 指令和模板
- PL/SQL异常处理学习之——如何编写健壮的程序
- 2017年上海金马五校程序设计竞赛:Find Palindrome
- CF
- Android实践:有序广播
- struts jstl标签
- xxxx
- Ubuntu16.04离线安装Nodejs与JDK
- qwb与学姐---之江学院第0届校赛最大生成树+lca
- 实验报告5_JPEG编解码原理及程序调试