ORALCE的异常处理

一、异常类型
二、异常的抛出
三、异常的传播
四、EXCEPTION_INT编译指示

[@more@]

一、异常类型

Exception Oracle Error SQLCODE Value
ACCESS_INTO_NULL ORA-06530 -6530
CASE_NOT_FOUND ORA-06592 -6592
COLLECTION_IS_NULL ORA-06531 -6531
CURSOR_ALREADY_OPEN ORA-06511 -6511
DUP_VAL_ON_INDEX ORA-00001 -1
INVALID_CURSOR ORA-01001 -1001
INVALID_NUMBER ORA-01722 -1722
LOGIN_DENIED ORA-01017 -1017
NO_DATA_FOUND ORA-01403 +100
NOT_LOGGED_ON ORA-01012 -1012
PROGRAM_ERROR ORA-06501 -6501
ROWTYPE_MISMATCH ORA-06504 -6504
SELF_IS_NULL ORA-30625 -30625
STORAGE_ERROR ORA-06500 -6500
SUBSCRIPT_BEYOND_COUNT ORA-06533 -6533
SUBSCRIPT_OUTSIDE_LIMIT ORA-06532 -6532
SYS_INVALID_ROWID ORA-01410 -1410
TIMEOUT_ON_RESOURCE ORA-00051 -51
TOO_MANY_ROWS ORA-01422 -1422
VALUE_ERROR ORA-06502 -6502
ZERO_DIVIDE ORA-01476 -1476

二、异常的抛出

由三种方式抛出异常
1. 通过PL/SQL运行时引擎
2. 使用RAISE语句
3. 调用RAISE_APPLICATION_ERROR存储过程
RAISE_APPLICATION_ERROR函数能够在pl/sql程序块的执行部分和异常部分调用,显式抛出带特殊错误号的命名异常。 Raise_application_error(error_number,message[,true,false]))
  错误号的范围是-20,000到-20,999。错误信息是文本字符串,最多为2048字节。TRUE和FALSE表示是添加(TRUE)进错误堆(ERROR STACK)还是覆盖(overwrite)错误堆(FALSE)。缺省情况下是FALSE。
三、异常的传播
没有处理的异常将沿检测异常调用程序传播到外面,当异常被处理并解决或到达程序最外层传播停止。在声明部分抛出的异常将控制转到上一层的异常部分。

所以想在捕捉异常后想代码继续执行,必须通过块嵌套的方式进行处理。如下面的代码所示:

declare
a exception;
b exception;
begin
begin
raise a;
exception
when a then
dbms_output.put_line('a excption');
end;
raise b;
exception
when b then
dbms_output.put_line('b exception');
end;

四、EXCEPTION_INT编译指示
功能是将某命名异常同某特定Oracle错误关联起来.
主用用来捕捉某特定异常错误,而不是通过OTHERS来处理.
语法:PROGMA EXCEPTION_INIT(exception_name,oracle_error_number)
eg.SQL> DECLARE
2 expa EXCEPTION;
3 PRAGMA EXCEPTION_INIT(expa,-6502);
4 vn NUMBER(1);
5 BEGIN
6 vn:=24;
7 EXCEPTION
8 WHEN expa THEN
9 dbms_output.put_line('数字或值错误 : 数值精度太高');
10 WHEN OTHERS THEN
11 dbms_output.put_line(SQLCODE);
12 dbms_output.put_line(substr(SQLERRM,1,100));
13 END;
14 /
数字或值错误 : 数值精度太高

PL/SQL procedure successfully completed

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/594892/viewspace-968211/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/594892/viewspace-968211/

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值