例外-3

本文深入解析Oracle中的异常处理机制,包括预定义异常、用户自定义异常的声明与使用,以及如何通过异常处理来增强程序的健壮性和错误反馈。通过具体示例,展示了如何在PL/SQL中有效地捕获和响应不同类型的异常。

显示用户定义例外情况的示例

=============================================


DECLARE
M NUMBER(4);
MYERROR EXCEPTION;
BEGIN
SELECT COMM INTO M FROM EMP WHERE EMPNO=7788;
IF M IS NULL THEN
RAISE MYERROR;
END IF;
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('ERROR OF DATA......!');
WHEN TOO_MANY_ROWS THEN
DBMS_OUTPUT.PUT_LINE('ERROR OF TOOMANY ROWS.....!');
WHEN MYERROR THEN
DBMS_OUTPUT.PUT_LINE('ERROR FOUND NULL......!');
END; 
USER DEFINED EXCEPTION ----用于显式引发异常。 必须在声明部分中声明,并在expeption块中进行处理。

显示用户定义例外情况的示例

=============================================


 DECLARE
 SALARY EMP.SAL%TYPE;
 NAME EMP.ENAME%TYPE;
 NO NUMBER:=&NO;
 GREATER EXCEPTION;   --User defined exception
 LESSER EXCEPTION;    --User defined exception
 BEGIN
 SELECT ENAME,SAL INTO NAME,SALARY FROM EMP WHERE  EMPNO=NO;
 IF SALARY>2000 THEN
 RAISE GREATER;   --User defined exception raised explicitely.
 ELSE
 RAISE LESSER;     --User defined exception raised explicitely.
 END IF;
 EXCEPTION
 WHEN GREATER THEN
 RAISE_APPLICATION_ERROR(-20001,'YOUR SALARY IS MORE  THAN 2000');
--User defined exception handled here.
 WHEN LESSER THEN
 RAISE_APPLICATION_ERROR(-20002,'YOUR SALARY IS LESS   THAN 2000');
--User defined exception handled here.
 WHEN NO_DATA_FOUND THEN
 RAISE_APPLICATION_ERROR(-20003,'PLEASE   ENTER A VALID  EMPNO');
 END; 
注-可以在单个异常块中处理预定义和用户定义的异常。

用户定义的ORACLE定义的数字除外

==================================================


DECLARE
EXP1 EXCEPTION;
PRAGMA EXCEPTION_INIT(EXP1,-00001);   --exp1 is initialized to error number 00001
BEGIN
INSERT INTO DEPT VALUES(&DNO,'&DNAME','&LOC');
DBMS_OUTPUT.PUT_LINE('ONE RECORD INSERTED');
EXCEPTION
WHEN EXP1 THEN
DBMS_OUTPUT.PUT_LINE('DUPLICATE VALUE');
--when the exception 00001 is raised instead of showing oracle defined message user defined message is displayed.
END;  
编译指示是在编译时而不是在运行时处理的编译器指令。

杂注必须出现在同一声明部分中异常声明之后的某个位置。

还要检查

例外情况-4

From: https://bytes.com/topic/oracle/insights/748326-exceptions-3-a

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值