最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

标准OraclePL/SQL异常处理

来源:动视网 责编:小采 时间:2020-11-09 12:15:05
文档

标准OraclePL/SQL异常处理

标准OraclePL/SQL异常处理:环境:ORCLE 10G单独出现一个SQL,异常如何处理,这里不说。一)标准的含异常处理的PL/SQL块DECLARE no_Detail_record EXCEP 环境:ORCLE 10G单独出现一个SQL,异常如何处理,这里不说。一)标准的含异常处理的PL/SQL块DECLARE no_Det
推荐度:
导读标准OraclePL/SQL异常处理:环境:ORCLE 10G单独出现一个SQL,异常如何处理,这里不说。一)标准的含异常处理的PL/SQL块DECLARE no_Detail_record EXCEP 环境:ORCLE 10G单独出现一个SQL,异常如何处理,这里不说。一)标准的含异常处理的PL/SQL块DECLARE no_Det


环境:ORCLE 10G单独出现一个SQL,异常如何处理,这里不说。一)标准的含异常处理的PL/SQL块DECLARE no_Detail_record EXCEP

环境:ORCLE 10G

单独出现一个SQL,异常如何处理,这里不说。

一)标准的含异常处理的PL/SQL块

DECLARE
no_Detail_record EXCEPTION;
PRAGMA EXCEPTION_INIT(no_Detail_record, -20000);
v_nDetailCount number;
BEGIN
select count(*) into v_nDetailCount from tson where .....;
if v_nDetailCount=0 then
raise_application_error(-20000,'');
end if;
EXCEPTION
WHEN no_Detail_record THEN
dbms_output.put_line('没有明细记录');
WHEN OTHERS THEN
dbms_output.put_line('未知的异常');
END;

二)raise_application_error
抛出异常的函数名称及其格式
RAISE_APPLICATION_ERROR(error_number,message[, {true |false}])
其中RAISE_APPLICATION_ERROR中第一个参数,异常编号,自己定义的只能在[-20999,-20000]之间。
但是根据我自己的试验,如果定义的编号小于-20999,程序也能正常执行。
第三个参数的值默认是false,那么抛出的异常替换所有其它的异常,这就意味着其它异常你无法处理,而以当前异常取而代之(这是大部分情况下的自定义异常的选择);如果是TRUE,那么新抛出的异常会存放在异常堆栈最上面(已经出现的其它异常之上)。

三)Oracle预定义的PL/SQL 异常

异常名称 ORACODE SQLCODE 触发时机

LOGIN_DENIED 01017 -1017
非法用户名称或者密码登录时候

NO_DATA_FOUND 01403 100 SELECT INTO没有返回行;或者代码指向嵌套表中被删除的元素;或者代码指向索引表(数组)的未初始化的元素。

NOT_LOGGED_ON 01012 没有登录,确意图执行一些调用

PROGRAM_ERROR 06501 PL/SQL存在内部的错误

ROWTYPE_MISMATCH 06504 发生在一个游标给另外一个游标赋值的情况下,尤其是调用含有游标参数的子过程时候。如果二者返回类型不一致,会出现。

SELF_IS_NULL 30625 试图调用一个没有初始化的对象的方法成员,因为关键字SELF表示的是对象的自生(是内建参数),在调用时候总是第一个传递给方法成员。

STORAGE_ERROR 06500 PL/SQL耗尽了内存,或者内存发生泄露。

SUBSCRIPT_BEYOND_COUNT 06533 简单而言,就是访问数组对象(或者嵌套表)时候,越界了。

SUBSCRIPT_OUTSIDE_LIMIT 06532 和上面一个类似,不通的是这里的索引号是非法的,例如-1

SYS_INVALID_ROWID 01410 把一个不符合ROWID格式的字符串转换为ROWID时候发生的异常。

TIMEOUT_ON_RESOURCE 00051 等待一个资源的时候,发生超时。

TOO_MANY_ROWS 01422 SELECT INTO语句返回多余一行结果

VALUE_ERROR 06502 数字,转换,截取,或者大小约束发生的错误。例如用一个变量的长度比列的长度小,如果要保存列值就会发生异常。
在过程语句中,如果字符串转换为数字失败,会触发这个。在SQL语句中,则是触发INVALID_NUMBER异常。

ZERO_DIVIDE 01476 试图除以0.

ACCESS_INTO_NULL 06530 试图访问一个没有初始化对象的属性,和self_is_null类似

CASE_NOT_FOUND 06592 “情况没有发现”
在一个case when子句中,没有一个选择是满足的,但是又不存在else子句。

COLLECTION_IS_NULL 06531 试图实用exists之外的集合方法访问未初始化的数组或者嵌套表,或者是试图给它们赋值。

CURSOR_ALREADY_OPEN 06511 试图重新打开已经打开的游标。

DUP_VAL_ON_INDEX 00001 试图在唯一索引列上存入重复的值。

INVALID_CURSOR 01001 试图对游标做一些非法的操作,例如试图关闭一个本来就没有打开的游标。

INVALID_NUMBER 01722 和value_error类似,不过只适合SQL语句,且是字符转数字时候发生的。

说明: 1)sqlcode,,通常情况下=-1* to_number(oracode),除非有特别说明。
2)有几组异常是类似或者相关性比较大的,例如:
INVALID_NUMBER 和 VALUE_ERROR
SELF_IS_NULL 和 ACCESS_INTO_NULL, COLLECTION_IS_NULL
3) 和嵌套表以及数组的异常不少
4) no_data_found是一个比较不通 的异常。其sqlcode=100,而不是-1403

文档

标准OraclePL/SQL异常处理

标准OraclePL/SQL异常处理:环境:ORCLE 10G单独出现一个SQL,异常如何处理,这里不说。一)标准的含异常处理的PL/SQL块DECLARE no_Detail_record EXCEP 环境:ORCLE 10G单独出现一个SQL,异常如何处理,这里不说。一)标准的含异常处理的PL/SQL块DECLARE no_Det
推荐度:
标签: 标准 处理 数据
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top