oracle 自定义异常处理
--第一种方式:使用raise_application_error抛出自定义异常
declare
i number:=-1;
begin
if i=-1 then
raise_application_error(-20000,'参数值不能为负'); --抛出自定义异常
end if;
exception
when others then
dbms_output.put_line('err_code:'||sqlcode||';err_msg:'||sqlerrm); --进行异常处理
raise; --继续抛出该异常
end;
--第二种方式,使用 exception 进行异常的定义
declare
i number:=-1;
my_err exception; --自定义异常
PRAGMA EXCEPTION_INIT(my_err, -01476); --初始化异常(我理解就是将该异常绑定到某个错误代码上)
begin
if i=-1 then
raise my_err; --抛出自定义异常
end if;
exception
when my_err then --捕捉自定义异常
dbms_output.put_line('err_code:'||sqlcode||';err_msg:'||sqlerrm); --异常处理
raise; --继续抛出这个自定义异常
when others then --捕捉其它异常
dbms_output.put_line('err_code:'||sqlcode||';err_msg:'||sqlerrm); --异常处理
raise; --继续抛出异常
end;
第一种方式自定义异常的代码范围为:-20000到-20300
第二种方式的好处是,可以将自定义异常绑定到某上具体的预定义错误代码上,
如ORA-01476: divisor is equal to zero
这样我们就可以捕捉自定义异常而不需要用 others 进行捕捉了.但也不是所有的预定义异常都可以绑定,这个需要使用的时候自己多试试
最新文章
- 编写Java应用程序。首先,定义描述学生的类——Student,包括学号(int)、 姓名(String)、年龄(int)等属性;二个方法:Student(int stuNo,String name,int age) 用于对对象的初始化,outPut()用于输出学生信息。其次,再定义一个主类—— TestClass,在主类的main方法中创建多个Student类的对象,使用这些对象来测 试Stud
- 【codevs1034】 家园
- 外观模式/facade模式/结构型模式
- 遇到tomcat端口被占用问题解决方案
- 当Thread.Sleep的暂停时间参数设置过小时,精度很差的解决方法
- [转]Using the Group Pane to Repeat Page Titles
- httpd安装
- Part 53 to 55 Talking about Reflection in C#
- Android之布局属性
- C#时间戳与时间互转
- JS实现文本复制与剪切
- C日常语言实践中小(四)——勇者斗恶龙
- VS2012的安装项目只能用InstallShield Limited Edition
- java 反射的实例
- 正则语言引擎:一个简单LEX和YACC结合运用的实例
- New UWP Community Toolkit - Carousel
- 【USACO15FEB】审查(黄金)Censoring (Gold)
- IT题库9-线程池的概念和原理
- android SDK与ADT版本更新问题
- Some interesting facts about static member functions in C++