您的位置:首页 > 数据库 > Oracle

ORACLE中的异常处理

2009-04-09 15:49 357 查看
1、ORALCE自带一些命名的系统异常,如下:

Oracle Exception Name

Oracle Error
Explanation
中文注释
DUP_VAL_ON_INDEX
ORA-00001
You tried to execute an INSERT or UPDATE statement that has created a duplicate value in a field restricted by a unique index.
插入或者更新语句,与唯一索引相冲突。
TIMEOUT_ON_RESOURCE
ORA-00051
You were waiting for a resource and you timed out.
等待资源超时
TRANSACTION_BACKED_OUT
ORA-00061
The remote portion of a transaction has rolled back.
远程交易的部份交易已经回滚
INVALID_CURSOR
ORA-01001
You tried to reference a cursor that does not yet exist. This may have happened because you've executed a FETCH cursor or CLOSE cursor before OPENing the cursor.
引用一个不存在的游标,如FETCH或者是CLOSE在其OPEN之前等。
NOT_LOGGED_ON
ORA-01012
You tried to execute a call to Oracle before logging in.
在登陆ORACLE之前执行调用错误
LOGIN_DENIED
ORA-01017
You tried to log into Oracle with an invalid username/password combination.
登陆时用户名或者密码非法。
NO_DATA_FOUND
ORA-01403
You tried one of the following:

1. You executed a SELECT INTO statement and no rows were returned.

2. You referenced an uninitialized row in a table.

3. You read past the end of file with the UTL_FILE package.
执行查询无数据、引用一个末初使化的表、通过UTL_FILE包调用到尾的文件
TOO_MANY_ROWS
ORA-01422
You tried to execute a SELECT INTO statement and more than one row was returned.
采用SELECT INTO语句,但返回的记录超过了1条
ZERO_DIVIDE
ORA-01476
You tried to divide a number by zero.
0为除数
INVALID_NUMBER
ORA-01722
You tried to execute an SQL statement that tried to convert a string to a number, but it was unsuccessful.
将字符串转换成数字,但是转换失败
STORAGE_ERROR
ORA-06500
You ran out of memory or memory was corrupted.
内存不足
PROGRAM_ERROR
ORA-06501
This is a generic "Contact Oracle support" message because an internal problem was encountered.
系统自身程序错误
VALUE_ERROR
ORA-06502
You tried to perform an operation and there was a error on a conversion, truncation, or invalid constraining of numeric or character data.
在执行转换、截断、非法转换数据到文本出错
CURSOR_ALREADY_OPEN
ORA-06511
You tried to open a cursor that is already open.
打开一个已经打开的游标
2、也可以采用自定义的异常的名字:

declare

myexception exception;

begin

if 1<>2 then

raise myexception;

end if;

exception

when myexception then

/*注:raise_application_error的语法为raise_application_error(erorcd in int,erortx in varchar 2),其中erorcd的值为20001到20999*/

raise_application_error(20001,'my exception happens');

when others then

raise_application_error(-20001,'An error was encountered - '||SQLCODE||' -ERROR- '||SQLERRM);

end

3、存储过程可能要涉及到层层调用,因此在每一次都需要写异常处理,这让程序会更健壮。

本文出自:冯立彬的博客
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: