Oracle PL/SQL开发基础(第三十弹:预定义异常)
来源:互联网 发布:如何在淘宝上搜索店铺 编辑:程序博客网 时间:2024/06/04 18:16
无论是预定义错误还是自定义错误,Oracle在内部都会隐含地触发一个错误,每个错误都有一个序号,SQLCODE就是异常的编码,SQLERRM用来获取异常的信息。但是在PL/SQL进行异常处理时,不能直接使用异常编码,必须使用一个名字来引用和处理异常。因此PL/SQL为一些公共的错误定义了一系列的预定义异常。
常见的预定义异常如下:
DUP_CAL_ON_INDEX
唯一索引对应的列上有重复值 ORA-00051 -51 TIMEOUT_ON_RESOURCE
Oracle在等待资源时超时 ORA-01001 -1001 INVALID_CURSOR
在不合法的游标上进行操作 ORA-01012 -1012 NOT_LOGGED_ON
PL/SQL应用程序在没有连接Oracle数据库的情况下访问数据 ORA-01017 -1017 LOGIN_DENIED
PL/SQL应用程序连接Oracle数据库时提供了不正确的用户名或密码 ORA-01403 100 NO_DATA_FOUND
SELECT INTO语句没有返回数据,或者我们的程序引用了一个嵌套表中被删除了的元素或索引表中未初始化的元素。SQL聚合函数,如AVG和SUM,总是能返回一个值或空。所以,一个调用聚合函数的SELECT INTO语句从来不会抛出NO_DATA_FOUND
异常。FETCH语句最终会取不到数据,当这种情况发生时,不会有异常抛出。 ORA-01410 -1410 SYS_INVALID_ROWID
从字符串向ROWID转换发生错误,因为字符串并不代表一个有效的ROWID ORA-01422 -1422 TOO_MANY_ROWS
执行SELECT INTO时,结果集超过一行 ORA-01476 -1476 ZERO_DIVIDE
程序尝试除以0 ORA-01722 -1722 INVALID_NUMBER
在一个SQL语句中,由于字符串并不代表一个有效的数字,导致字符串向数字转换时会发生错误。当FETCH语句的LIMIT子句表达式后面不是一个正数时,这个异常也会被抛出。 ORA-06500 -6500 STORAGE_ERROR
PL/SQL运行时内存溢出或内存不足 ORA-06501 -6501 PROGRAM_ERROR
PL/SQL程序发生内部错误 ORA-06502 -6502 VALUE_ERROR
赋值时,变量长度不足以容纳实际数据。 ORA-06504 -6504 ROWTYPE_MISMATCH
赋值语句中使用的主游标变量和PL/SQL游标变量的类型不兼容。 ORA-06511 -6511 CURSOR_ALREADY_OPEN
程序尝试打开一个已经打开的游标。一个游标在重新打开之前必须关闭。 ORA-06530 -6530 ACCESS_INTO_NULL
尝试向一个为NULL的对象的属性赋值 ORA-06531 -6531 COLLECTION_IS_NULL
程序尝试调用一个未初始化嵌套表或变长数组的集合方法(不包括EXISTS),或者是程序尝试为一个未初始化嵌套表或变长数组的元素赋值 ORA-06532 -6532 SUBSCRIPT_OUTSIDE_LIMIT
程序引用一个嵌套表或变长数组,但使用的下标索引不在合法的范围内。 ORA-06533 -6533 SUBSCRIPT_BEYOND_COUNT
程序引用一个嵌套表或变长数组元素,但使用的下标索引超过嵌套表或变长数组元素总个数 ORA-06592 -6592 CASE_NOT_FOUND
CASE语句中没有任何WHEN子句满足条件,并且没有编写ELSE子句使用预定义异常如:
DECLARE v_empno1 NUMBER(4):=&empno1; --定义员工查询条件变量 v_empno2 NUMBER(4):=&empno2; v_empno3 NUMBER(4):=&empno3; v_sal1 NUMBER(10,2); --定义保存员工薪资的变量 v_sal2 NUMBER(10,2); v_sal3 NUMBER(10,2); v_selectcounter NUMBER := 1; --查询计数器变量 BEGIN SELECT sal INTO v_sal1 FROM emp WHERE empno=v_empno1; --查询员工薪资信息 v_selectcounter:=2; SELECT sal INTO v_sal2 FROM emp WHERE empno=v_empno2; v_selectcounter:=3; SELECT sal INTO v_sal3 FROM emp WHERE empno=v_empno3;EXCEPTION WHEN NO_DATA_FOUND THEN --处理未找到数据的异常 DBMS_OUTPUT.PUT_LINE('错误编号:'||SQLCODE||' 错误消息:'||SQLERRM ||' 触发异常的位置是:'||v_selectcounter); END;
阅读全文
1 0
- Oracle PL/SQL开发基础(第三十弹:预定义异常)
- Oracle PL/SQL异常处理(非预定义错误)
- PL/SQL预定义异常列表
- pl/sql预定义异常处理
- Oracle PL/SQL开发基础(第十九弹:集合的异常处理)
- Oracle PL/SQL开发基础(第二十九弹:异常处理简介)
- Oracle PL/SQL开发基础(第三十一弹:自定义异常)
- Oracle PL/SQL开发基础(第三十五弹:异常的传递)
- Oracle PL/SQL开发基础(第三十六弹:异常处理的一些经验)
- 【Oracle】PL/SQL 非预定义异常、自定义异常处理、RAISE_APPLICATION_ERROR
- 【Oracle】PL/SQL 非预定义异常、自定义异常处理、RAISE_APPLICATION_ERROR
- Oracle PL/SQL开发基础(第三弹:修改表)
- Oracle PL/SQL开发基础(第四弹:索引)
- Oracle PL/SQL开发基础(第五弹:视图)
- Oracle PL/SQL开发基础(第六弹:简单查询)
- Oracle PL/SQL开发基础(第十弹:子查询)
- Oracle PL/SQL开发基础(第十四弹:序列)
- Oracle PL/SQL开发基础(第十五弹:同义词)
- 面向切面的 Spring —— 如何使用注解创建切面?
- 《笨办法学python》加分习题4——我的答案
- 设计模式——策略模式
- 最大流
- 浅谈扩欧及exgcd对二元不定方程求解问题
- Oracle PL/SQL开发基础(第三十弹:预定义异常)
- 饭卡 (背包问题 动态规划)
- 二进制文件格式设计
- python中的集合set
- Gson解析Json数据(一)单类型格式
- (转)为Java说句公道话
- 集合框架(并发修改异常的产生原因及其解决方案)
- 花生壳内网穿透-ssh远程
- 对象实例化过程分析