Oracle——12异常

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


语句执行过程中,可能会因为异常造成损失,甚至是系统崩溃。为了避免这种情况的发生,必须对异常进行处理。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;
目录
相关文章
|
存储 Oracle 关系型数据库
Oracle 代码异常查询(五)
Oracle 代码异常查询
355 0
|
Web App开发 Oracle Java
Java项目启动时,隐藏的 oracle 驱动异常问题
报错信息:项目启动的时候,一直会报“registered driver with driverclassname=oracle.jdbc.driver.oracledriver was not found, trying direct instantiation.”。
3984 0
|
3月前
|
Oracle 关系型数据库 数据库
Oracle数据恢复—异常断电导致Oracle数据库数据丢失的数据恢复案例
Oracle数据库故障: 机房异常断电后,Oracle数据库启库报错:“system01.dbf需要更多的恢复来保持一致性,数据库无法打开”。数据库没有备份,归档日志不连续。用户方提供了Oracle数据库的在线文件,需要恢复zxfg用户的数据。 Oracle数据库恢复方案: 检测数据库故障;尝试挂起并修复数据库;解析数据文件。
|
6月前
|
SQL Oracle 关系型数据库
实时计算 Flink版产品使用问题之同步oracle表时,数据量约800万,检查点异常,该如何排查
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
SQL Oracle 关系型数据库
Oracle 代码异常查询(九)
Oracle 代码异常查询
436 0
|
SQL 存储 Oracle
Oracle 代码异常查询(三)
Oracle 代码异常查询
550 0
|
7月前
|
SQL Oracle 关系型数据库
Oracle的PL/SQL游标自定义异常:数据探险家的“专属警示灯”
【4月更文挑战第19天】Oracle PL/SQL中的游标自定义异常是处理数据异常的有效工具,犹如数据探险家的警示灯。通过声明异常名(如`LOW_SALARY_EXCEPTION`)并在满足特定条件(如薪资低于阈值)时使用`RAISE`抛出异常,能灵活应对复杂业务规则。示例代码展示了如何在游标操作中定义和捕获自定义异常,提升代码可读性和维护性,确保在面对数据挑战时能及时响应。掌握自定义异常,让数据管理更从容。
|
SQL Oracle 关系型数据库
Oracle 代码异常查询(八)
Oracle 代码异常查询
366 0
|
SQL 存储 Oracle
Oracle 代码异常查询(七)
Oracle 代码异常查询
748 0
|
存储 Oracle 关系型数据库
Oracle 代码异常查询(六)
Oracle 代码异常查询
302 0