社会保险部PLSQL规范
- 格式:xls
- 大小:128.00 KB
- 文档页数:4
1、异常正确使用规范。
每个编写的sql应该是类似这样的:
Begin
Exception
When <错误1> then
<错误处理>;
When <错误2> then
<错误处理>;
……
When others then
<其他错误的捕获>
End;
这样,这个sql就在我们的控制之中了,如果提示信息足够准确,很容易定位到出错的位置
。
2、最后使用WHEN OTHERS异常捕获。
Begin
Exception
When NO_DATA_FOUND then
<错误处理>;
When TOO_MANY_ROWS then
<错误处理>;
……
When others then
<其他错误的捕获>
End;
3、不要自定义错误信息或显式使用RAISE_APPLICATION_ERROR语句,除非有特殊的需要。
4、捕获异常的时机
(1)捕获程序的异常,允许进程继续进行,而不是停止。
(2)记录异常日志来帮助协查问题和解决问题。
(3)当数据、软件或硬件需要修理的时候,自动通知系统管理员或者维护人员。
5、oracle预定义的异常
(1)可通过下面语句进行查询:select * from dba_source where type='PACKAGE' and name='STAND
(2)红色部分是日常编码中经常遇到的异常;
CURSOR_ALREADY_OPEN exception; pragma EXCEPTION_INIT(CURSOR_ALREADY_OPEN, '-6511'); 游标已经打
DUP_VAL_ON_INDEX exception; pragma EXCEPTION_INIT(DUP_VAL_ON_INDEX, '-0001'); 唯一索引对应的列上
TIMEOUT_ON_RESOURCE exception; pragma EXCEPTION_INIT(TIMEOUT_ON_RESOURCE, '-0051'); Oracle 在
INVALID_CURSOR exception; pragma EXCEPTION_INIT(INVALID_CURSOR, '-1001'); 在不合法的
NOT_LOGGED_ON exception; pragma EXCEPTION_INIT(NOT_LOGGED_ON, '-1012'); PL/SQL 应
LOGIN_DENIED exception; pragma EXCEPTION_INIT(LOGIN_DENIED, '-1017'); PL/SQL 应
NO_DATA_FOUND exception; pragma EXCEPTION_INIT(NO_DATA_FOUND, 100); 使用 sel
ZERO_DIVIDE exception; pragma EXCEPTION_INIT(ZERO_DIVIDE, '-1476'); 除数为 0
INVALID_NUMBER exception; pragma EXCEPTION_INIT(INVALID_NUMBER, '-1722'); 内嵌的SQL
TOO_MANY_ROWS exception; pragma EXCEPTION_INIT(TOO_MANY_ROWS, '-1422'); 执行 select into
STORAGE_ERROR exception; pragma EXCEPTION_INIT(STORAGE_ERROR, '-6500'); 运行 PL/S
PROGRAM_ERROR exception; pragma EXCEPTION_INIT(PROGRAM_ERROR, '-6501'); PL/SQL 内
VALUE_ERROR exception; pragma EXCEPTION_INIT(VALUE_ERROR, '-6502'); 赋值时,变
ACCESS_INTO_NULL exception; pragma EXCEPTION_INIT(ACCESS_INTO_NULL, '-6530'); 未定义对
COLLECTION_IS_NULL exception; pragma EXCEPTION_INIT(COLLECTION_IS_NULL , '-6531'); 集合元素
SUBSCRIPT_OUTSIDE_LIMIT exception; pragma EXCEPTION_INIT(SUBSCRIPT_OUTSIDE_LIMIT,'-6532');
SUBSCRIPT_BEYOND_COUNT exception; pragma EXCEPTION_INIT(SUBSCRIPT_BEYOND_COUNT ,'-6533');
ROWTYPE_MISMATCH exception; pragma EXCEPTION_INIT(ROWTYPE_MISMATCH, '-6504'); 宿主游标
SELF_IS_NULL exception; pragma EXCEPTION_INIT(SELF_IS_NULL, '-30625'); 使用对象
CASE_NOT_FOUND exception; pragma EXCEPTION_INIT(CASE_NOT_FOUND, '-6592'); CASE中若
USERENV_COMMITSCN_ERROR exception; pragma EXCEPTION_INIT(USERENV_COMMITSCN_ERROR, '-1725');
NO_DATA_NEEDED exception; pragma EXCEPTION_INIT(NO_DATA_NEEDED, '-6548');
name='STANDARD' and line between 153 and 227;
'); 游标已经打开
唯一索引对应的列上有重复的值
'); Oracle 在等待资源时超时
在不合法的游标上进行操作
PL/SQL 应用程序在没有连接 oralce 数据库的情况下访问数据
PL/SQL 应用程序连接到 oracle 数据库时,提供了不正确的用户名或密码
使用 select into 未返回行,
除数为 0
内嵌的SQL语句不能将字符转换为数字
执行 select into 时,结果集超过一行
运行 PL/SQL 时,超出内存空间
PL/SQL 内部问题,可能需要重装数据字典& pl./SQL 系统包
赋值时,变量长度不足以容纳实际数据
未定义对象
'); 集合元素未初始化
使用嵌套表或 VARRAY 时,将下标指定为负数
元素下标超过嵌套表或 VARRAY 的最大值
宿主游标变量与 PL/SQL 游标变量的返回类型不兼容
使用对象类型时,在 null 对象上调用对象方法
CASE中若未包含相应的 WHEN并且没有设置ELSE时