oracle自定义异常长度,Oracle自定义异常收集(二)

1、非预定义异常使用预定义异常,只能处理21个Oracle错误.而当使用PL/SQL开发应用程序时,可能还遇到其他的上结错误. 使用非预定义异常的步骤如下: 定义异常 -> 关联异常和错误 -> 引用例外 当定义Oracle错误和例外之间的关联关系时,要使用伪过程EXCEPTION_INTI.下面以处理ORA-02291错误为例说明:

DECLARE e_integrity EXCEPTION;

PRAGMA EXCEPTION_INIT(e_integrity,-2291);

BEGIN

UPDATE emp SET deptno=&dno WHERE empno=&eno;

EXCEPTION WHEN e_integrity THEN

DBMS_OUTPUT.PUT_LINE('该部门不存在.');

END;

2、处理自定义异常预定义异常和非预定义异常都与Oracle错误有关,并且出现Oracle错误时会自动触发. 而自定义异常与Oracle错误没有任何关联,它是开发人员为特定情况所定义的异常. 自定义异常必须显式触发.使用步骤如下: 定义异常 -> 显式触发异常 -> 引用异常首先要在定义部分(DECLARE)定义异常,然后在执行部分(BEGIN)触发异常(RAISE语句), 最后在异常处理部分(EXCEPTION)捕捉处理.如下:

DECLARE e_integrity EXCEPTION;

PRAGMA EXCEPTION_INIT(e_integrity,-2291);

e_no_employee EXCEPTION;

BEGIN

UPDATE emp SET deptno=&dno WHERE empno=&eno;

IF SQL%NOTFOUND THEN

RAISE e_no_employee;

END IF;

EXCEPTION WHEN e_integrity THEN

DBMS_OUTPUT.PUT_LINE('该部门不存在.');

WHEN e_no_employee THEN

DBMS_OUTPUT.PUT_LINE('该雇员不存在.');

END;

3、使用异常函数在PL/SQL块中出现Oracle错误时,通过使用例外函数可以取得错误号以及相关的错误消息,函数SQLCODE用于取得Oracle错误号. SQLERRM则用于取得与之相关的错误消息.另外,在存储过程,函数和包中使用RAISE_APPLICATION_ERROR可以自定义错误号和消息.

DECLARE v_ename emp.ename%TYPE;

BEGIN

SELECT ename INTO v_ename FROM emp WHERE sal=&&v_sal;

DBMS_OUTPUT.PUT_LINE('雇员名:'||v_ename);

EXCEPTION WHEN NO_DATA_FOUND THEN

DBMS_OUTPUT.PUT_LINE('不存在工资为'||&v_sal||'雇员');

WHEN OTHERS THEN

DBMS_OUTPUT.PUT_LINE('错误号'||SQLCODE);

DBMS_OUTPUT.PUT_LINE(SQLERRM);

END;

4、RAISE_APPLICATION_ERROR 该过程用于自定义错误消息.只能在数据库端的子程序(过程,函数,包,触发器)中使用,不能在匿名块和客户端程序是使用. 语法如下: raise_application_error(error_number,message[,{TRUE | FALSE}]); error_number : 错误号,范围是: -20000 ~ -20999之间的负整数; message : 错误消息,长度不能超过2048字节; 第三个可靠选参数,如果TRUE,该错误会被放在先前错误堆栈中;如果FALSE(默认),则替换先前所有错误. 例:

CREATE OR REPLACE PROCEDURE raise_comm(eno NUMBER,commission NUMBER) IS v_comm emp.comm%TYPE;

BEGIN

SELECT comm INTO v_comm FROM emp WHERE emp=eno;

IF v_comm IS NULL THEN

RAISE_APPLICATION_ERROR(-20001,'该员工无补助.');

END IF;

EXCEPTION WHEN NO_DATA_FOUND THEN

DBMS_OUTPUT.PUT_LINE('该雇员不存在.');

END;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值