--第一种方式:使用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 进行捕捉了.但也不是所有的预定义异常都可以绑定,这个需要使用的时候自己多试试

最新文章

  1. 编写Java应用程序。首先,定义描述学生的类——Student,包括学号(int)、 姓名(String)、年龄(int)等属性;二个方法:Student(int stuNo,String name,int age) 用于对对象的初始化,outPut()用于输出学生信息。其次,再定义一个主类—— TestClass,在主类的main方法中创建多个Student类的对象,使用这些对象来测 试Stud
  2. 【codevs1034】 家园
  3. 外观模式/facade模式/结构型模式
  4. 遇到tomcat端口被占用问题解决方案
  5. 当Thread.Sleep的暂停时间参数设置过小时,精度很差的解决方法
  6. [转]Using the Group Pane to Repeat Page Titles
  7. httpd安装
  8. Part 53 to 55 Talking about Reflection in C#
  9. Android之布局属性
  10. C#时间戳与时间互转
  11. JS实现文本复制与剪切
  12. C日常语言实践中小(四)——勇者斗恶龙
  13. VS2012的安装项目只能用InstallShield Limited Edition
  14. java 反射的实例
  15. 正则语言引擎:一个简单LEX和YACC结合运用的实例
  16. New UWP Community Toolkit - Carousel
  17. 【USACO15FEB】审查(黄金)Censoring (Gold)
  18. IT题库9-线程池的概念和原理
  19. android SDK与ADT版本更新问题
  20. Some interesting facts about static member functions in C++

热门文章

  1. 第一次div1做出3道题
  2. VS2012 编译 Assimp
  3. OpenFlow Switch学习笔记(五)——Group Table、Meter Table及Counters
  4. jbrowse 的配置与使用gff, vcf, fa, bed, bam
  5. easyUI——datebox验证和自定义取消按钮
  6. 转 SQL Server中关于的checkpoint使用说明
  7. ListView滚动到顶部
  8. c 深度剖析 3
  9. API中FileReader 接口事件
  10. JavaWeb学习记录(四)——日期和数字的格式转换