PLSQL入门与精通(第32章:在包里边自定义异常)

这次说明PL/SQL包的异常定义。
在PL/SQL中,为了处理错误,经常使用异常(例外)名记述例外处理程序。
对于常见的错误,例外名是预先定义好的(这被称为预定义例外),程序里边会使用这个定义好的例外名。
但是,有些错误是事先未定义的例外,这时候可以在申明部中自行定义例外名称,同时需要定义一个系统错误编号与之相对应。
这是所谓的用户定义异常(例外)。
自定义异常语法
<<声明部>>
–例外名称声明
例外名 EXCEPTION;
–例外名与系统错误编号的对应
PRAGMA EXCEPTION INIT(例外名,系统错误编号);

但是,在PL/SQL块内的本地声明部进行自定义的异常,只能在该块中使用。
其他的PL/SQL程序中无法使用,也要定义自己的同样的例外名。这就麻烦了?如何定义一个所有plsql都可以用的异常呢。
这时候,使用PL/SQL的包的话,就可以解决这个问题。
也就是说,上述异常定义不是在PL/SQL的本地申明,而是预先在包的申明部进行声明。
这样,其他的PL/SQL程序也可以使用这个定义的自定义异常。

请看下面的例子:
SQL> CREATE OR REPLACE PACKAGE PAC1
2 IS
3 FK_ERROR EXCEPTION;
4 PRAGMA EXCEPTION_INIT(FK_ERROR,-2292);
5 END;
6 /
包已创建。

上述是PAC1包中申明了一个异常名称:FK_ERROR,将该异常与系统错误编号-2922相对应。
ORA-2292错误是违反外键约束规则相关的错误。
因此,由于该包里边定义了ORA-2292错误,其他plsql程序就可以直接利用PAC1.FK_ERROR这个例外名来进行异常处理。
请看下面的例子:
SQL> DECLARE
2 V DEPTNO NUMBER:=&部门编号;
3 BEGIN
4 DELETE FROM DEPT WHERE DEPTNO = V_DEPTNO;
5 EXCEPTION
6 WHEN PAC1.FK_ERROR THEN
7 DBMS_OUTPUT.PUT_LINE(‘存在员工的部门:’ || V DEPTNO
8 || ‘不能被删除’);
9 END;
10 /

请在部门编号中输入值:10
DEPTNO NUMBER:=10;
存在员工的部门:10不能被删除

PL/SQL过程成功完成。

在第4行的DELETE文中,由于外键限制,想要删除员工所在部门(部门编号10),这时候会违反外键约束的错误(ORA-2292),
第6行的“PAC1.FK_ERROR”例外处理程序会进行错误处理,“存在员工的部门:10不能被删除”的信息就会被显示出来。

如上所述,如果在包申明部声明用户定义异常,并使之与系统错误编号相对应,
在其他PLSQL程序和函数中就可以直接使用改自定义异常进行例外处理了。

这就是包里自定义异常的好处。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值