PL/SQL中的异常处理

来源:互联网 发布:站群管理系统sql注入 编辑:程序博客网 时间:2024/06/06 18:02

PL/SQL程序在运行的过程当中,可能会出现错误或者异常的情况,例如无法建立与ORACLE的连接,或者返回多行的错误。好的程序应该是对可能发生的异常情况进行处理,异常处理代码在EXCEPTION中实现。可以在EXCEPTION块中使用WHEN语句来定义异常处理。WHEN语句的使用方法如下:
EXCEPTION

WHEN <异常情况名> THEN

  <异常处理代码>

WHEN <异常情况名> THEN

  <异常处理代码>

……

WHEN OTHERS THEN

  <异常处理代码>

异常情况名是ORACLE定义的异常情况标识,当WHEN语句中指定的异常情况发生的时候,THEN关键字后面的异常处理代码将会被执行:

异常情况名

ORA代码

SQL代码

说明

ACCESS_INTO_NULL

ORA-06530

-6530

试图赋值到一个未初始化的对象

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

试图和ORACLE建立连接,但是却不能提供有效的用户名和口令

NO_DATA_FOUND

ORA-01403

100

执行了SELECT INTO语句,但是却没有匹配的行数据

NOT_LOGGED_ON

ORA-01012

-1012

试图进行数据库操作,但没登陆

PROGRAM_ERROR

ORA-06501

-6501

PL/SQL内部错误

ROWTYPE_MISMATCH

ORA-06504

-6504

PL/SQL返回的游标变量和主游标不匹配

SELF_IS_NULL

ORA-30625

-30625

试图执行对象例程的一个成员方法,但全程为空(NULL

STORAGE_ERROR

ORA-06500

-6500

存储空间错误

SUBSCRIPT_BEYOND_COUNT

ORA-06532

-6532

试图通过使用索引来引入嵌入表,但是此索引比表中的数值还要大

SYS_INVALID_ROWID

ORA-01410

-1410

试图将一个字符串传递给ROWID,但是操作失败

TIMEOUT_ON_RESOURCE

ORA-00051

-51

Oracle等待分配资源的时候,资源已经耗尽

TOO_MANY_ROWS

ORA-01422

-1422

执行一条SELECT INTO语句,但是却返回了多行数据

VALUE_ERROR

ORA-06502

-6502

当试图将一个值存储到一个变量时,此变量不接受这个值。可能是由于该值太大了或者与变量的类型不匹配

ZERO_DIVIDE

ORA-01476

-1476

试图用0做除数

以下是一个控制异常的示例程序:

DECLARE

  var_name VARCHAR2(100);

BEGIN

  SELECT aac003

  INTO var_name

  FROM ac01、、

  WHERE aac002='xxxx';

  EXCEPTION

  WHEN TOO_MANY_ROWS THEN

       dbms_output.put_line('返回多条数据');

  WHEN NO_DATA_FOUND THEN

       dbms_output.put_line('没有找到数据');

  WHEN OTHERS THEN

       dbms_output.put_line('执行有误'||SQLERRM);

END;

 

原创粉丝点击