博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Oracle——12异常
阅读量:6572 次
发布时间:2019-06-24

本文共 1413 字,大约阅读时间需要 4 分钟。

hot3.png

语句执行过程中,可能会因为异常造成损失,甚至是系统崩溃。为了避免这种情况的发生,必须对异常进行处理。PL/SQL提供了对异常进行处理的方法。该方法会使得在PL/SQL代码部分执行的过程中无论何时发生了异常错误,都会自动转向执行异常处理部分。

 

1、预定义异常

预定义异常是由系统产生的。比如在出现0为除数的时候,系统会产生一个预定义的ZERO_DIVIDE异常。示例如下:

 

declare 			num1 number := 2;			num2 number := 0;			num3 number;		begin			num3 := num1/num2; --当执行这句的时候,系统捕捉到异常会自动转到异常处理部分,最后输出“不能除0”。			exception			when zero_divide then				dbms_output.put_line('不能除0');			when too_many_rows then				dbms_output.put_line('too many rows');		end;
 

如果在当前块中没有处理异常的代码,并且begin/end块是嵌套的,程序将继续在外部块中寻找处理异常的代码块,直到找到一个。如果最终没有处理异常的代码块存在,程序将结束。当对异常进行了处理后,程序将继续执行异常代码块之后的代码。

 

2、自定义异常

用户如果需要自定义异常的话,可以先定义一个exception变量,然后使用raise语句来抛出一个异常,然后在捕捉异常的时候捕捉对应的抛出异常。示例代码如下:

 

declare			selfDefineException exception; /*定义异常变量*/			num1 number := 2;			num2 number := 3;			num3 number;		begin			num3 := num1 + num2;			if num3=5 then				raise selfDefineException; /*抛出自定义的异常*/			end if;			exception				when selfDefineException then /*捕获自定义的异常*/					dbms_output.put_line("selfDefineException");				when zero_divide then					dbms_output.put_line("不能除0");		end;
 

3、使用others异常

对于那些没有直接捕捉的异常,都可以使用others异常进行捕捉,others异常可以单独使用,但当与其他异常处理一起使用的时候必须放在所有情况的最末尾。示例代码如下:

 

declare 			num1 number := 2;			num2 number := 0;			num3 number;		begin			num3 := num1/num2; --当执行这句的时候,系统捕捉到异常会自动转到异常处理部分,最后输出“不能除0”。			exception			when others then /*这里直接捕捉others异常*/				dbms_output.put_line('不能除0');		end;

转载于:https://my.oschina.net/NEMOCoder/blog/608965

你可能感兴趣的文章
前端面经
查看>>
AI进入制造业 节省人工成本也能提高产品性能
查看>>
剑指offer题解
查看>>
MXRuntimeUtils,替代 [NSObject performSelector object object ]的工具
查看>>
深入理解HTTPS工作原理
查看>>
一个月面试 4 家,3 家 Offer,来看看人家是如何面试的!
查看>>
一个近乎完美基于Dubbo的微服务改造实践
查看>>
广安a货翡翠,自贡a货翡翠
查看>>
通信方式
查看>>
JavaScript-call&apply方法
查看>>
Swift之UITextField+富文本+代理传值
查看>>
Java 进阶基础知识
查看>>
我的前端笔记之 meta 篇
查看>>
Python开源软件大全(内附源码)
查看>>
一个故事告诉你什么是消息队列
查看>>
【面经】记一次字节跳动后端面试经历
查看>>
git常用命令(史上最经典)
查看>>
(六)java版电子商务spring cloud分布式微服务b2b2c社交电商- commonservice-config配置服务搭建...
查看>>
ld framework not found "FileProvider" for architecture x86_64 报错
查看>>
@ModelAttribute注解使用
查看>>