PL/SQL编程---异常

本文详细讲解了程序中异常的概念、分类,包括ORACLE内置异常和自定义异常的使用,以及如何通过SQLCODE和SQLERRM获取信息。实例演示了异常变量的声明、自定义异常的抛出与绑定,适合理解异常处理的最佳实践。

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

--异常
	--概念
		是程序在运行过程中出现的各种错误,导致程序不能正常执行完成。
		包括语法错误、程序错误、网络、硬件等故障。
	--分类
		--ORACLE内置异常
			以ORA开头,后面是异常编号
		--自定义异常
	--异常变量
		1)SQLCODE:获取异常编码,如NO_DATA_FOUND异常编码是100,其他自定义异常的编码大于1,内置异常编码小于-1
		2)SQLERRM:获取异常信息的
	--注意
		EXCEPTION代码块只能出现在END之前,EXCEPTION和END之间的所有代码都属于异常处理代码。
	--异常在代码块中的书写		
		DECLARE
			--声明部分
		BEGIN
			--代码块
		EXCEPTION --异常处理
			WHEN 异常名称 THEN
				异常处理代码;
			WHEN 异常名称 THEN
				异常处理代码;
			...
			WHEN OTHERS THEN
				异常处理代码;
		END;

--示例1
DECLARE
	V_EMP SCOTT.EMP%ROWTYPE;
BEGIN
	SELECT * INTO V_EMP FROM EMP WHERE EMPNO=7219;
	DBMS_OUTPUT.PUT_LINE(V_EMP.EMPNO||','||V_EMP.ENAME);
EXCEPTION
	WHEN NO_DATA_FOUND THEN
		DBMS_OUTPUT.PUT_LINE('员工不存在');
		DBMS_OUTPUT.PUT_LINE(SQLCODE);
		DBMS_OUTPUT.PUT_LINE(SQLERRM);
END;
-------------------------------------------------------------------------------

--自定义异常
	--自定义异常变量
		变量名 EXCEPTION; --定义一个异常变量
	--抛出异常
		1)RAISE 异常变量;
			DECLARE
				V_EXC EXCEPTION;
			BEGIN
				RAISE V_EXC; --抛出异常
			EXCEPTION --处理异常
				WHEN V_EXC THEN
					DBMS_OUTPUT.PUT_LINE(SQLCODE);
					DBMS_OUTPUT.PUT_LINE(SQLERRM);
			END;
		2)DBMS_STANDARD.RAISE_APPLICATION_ERROR(异常编码,'异常信息'); --一般为业务异常或应用异常
			自定义异常编码取值范围-2000~20999之间
			BEGIN
				DBMS_STANDARD.RAISE_APPLICATION_ERROR(-20003,'我的异常信息');
			EXCEPTION
				WHEN OTHERS THEN
				DBMS_OUTPUT.PUT_LINE(SQLCODE);
				DBMS_OUTPUT.PUT_LINE(SQLERRM);						
			END;
	--异常绑定
		异常变量 EXCEPTION; --定义一个自定义异常
		PRAGMA EXCEPTION_INIT(自定义异常名,异常编码); --绑定异常到自定义异常

--示例1
DECLARE
	V_EXC EXCEPTION;
	PRAGMA EXCEPTION_INIT(V_EXC,-00001); --将ORA-00001异常绑定到自定义异常V_EXC上
BEGIN
	INSERT INTO DEPT VALUES(10,'A','B');
EXCEPTION
	WHEN V_EXC THEN
		DBMS_OUTPUT.PUT_LINE(SQLCODE);
		DBMS_OUTPUT.PUT_LINE(SQLERRM);		
END;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值