Oracle异常

本文介绍了Oracle中的异常处理,包括预定义异常和用户自定义异常。预定义异常在违反Oracle规则时隐式引发,而自定义异常允许用户通过RAISE语句显示引发。异常处理涉及捕获和处理异常,如使用PAISE_APPLICATION_ERROR进行详细错误信息的定义。非自定义异常则需要关联系统无名异常编号。异常未被捕获时会沿调用栈传播。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Oracle异常

异常有两种:

预定义异常(内部异常):当pl/sql程序违反oracle规则或超越系统限制时隐式引发
用户定义异常:用户可以在pl/sql块的声明部门定义异常。自定义的异常通过RAISE语句显示引发
处理预定义异常:在pl/sql块要捕获异常,必须使用系统所给出的异常名称。而不是异常编号。

错误处理

需要先定义异常变量,然后在需要产生异常的地方抛出异常,然后在异常不利部门进行捕获异常进行处理。

DECLARE 
	NO_MONEY_ERROR EXCEPTION;--定义异常变量
	MONEY NUMBER :=4000;
	MALANCE NUMBER:=3000;
BEGIN
	IF BALANCE < MONEY THEN
		RAISE ON_MONEY_ERROR;--抛出异常
	ELSE
		DBMS_OUTPUT.PUTLINE('转账成功!!!');
	EBD IF;
EXCEPTION
 	WHEN ON_MONEY_ERROR THEN
 			DBMS_OUTPUT.PUT_LINE('你是穷么?余额不足!!!');
 END;
 /
自定义异常

在存储过程编程的过程中,有时候我们要自定义比较详细的异常信息,可以使用PAISE_APPLICATION_ERROR
语法:PAISE_APPLICATION_ERROR 错误编码,错误信息
注意:错误编码是用户为抛出异常指定的编号,范围在-20000到-20999之间错误消息是用户定义的错误消息,长度为2048

DELARE
	MONEY NUMBER :=4000;
	BALANCE NUMBER :=3000;
BEGIN
	IF BALANCE <MONEY THEN
		RAISE_APPLICATION_ERROR('余额不足!!');
	ELSE
		DBMS_OUTPUT.PUT_LINE('转账成功!!');
	END IF;
END;
/
非自定义异常

1:系统中有很多错误没有名称,在捕获错误时不能直接使用编号,要使用名称
2:我们可以自定义一个异常变量,将改变量与系统无名的异常编号相关联
3:这样就可以通过自定义的异常变量抛出系统没有名字的异常

DELARE
	异常变量 EXCEPTION;--自定义异常变量
	PRAGMA EXCEPTION_INIT(异常变量,-1);--将编号为-1的系统异常赋给异常变量
BEGIN
	INSERT INTO 表名(列名) VALUES (数据);
EXCEPTION
	WHEN 异常变量 THEN
		DBMS_OUTPUT.PUT_LINE('数据已存在!!');
END;
异常传播

没有捕获的异常将沿检车异常调用程序传播到外面,当异常被处理并解决或到达程序最外层传播停止。

BEGIN
	执行语句1;
	BEGIN
		执行语句2
		BEGIN
			执行语句3,产生异常;
		EXCEPTION		
				WHEN 异常变量 THEN
				--该处不能处理异常,异常并未在此结束
		END;
	EXCEPTION
		WHEN others THEN
			处理异常
	END;
END;

如果还不明白,这有个大神发的信息,可以看一下。上述内容为本人编写,并非转载。http://www.tuicool.com/articles/zUbeIrE

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值