当前位置: Oracle DBA培训网-优技培训 >> oracle培训 > Oracle培训教程 >

PL/SQL入门:预定义异常处理

PL/SQL入门:预定义异常处理

PL/SQL入门:预定义异常处理?在程序运行时出现的错误,称为异常。发生异常后,语句将停止执行,PL/SQL引擎立即将控制权转到PL/SQL块的异常处理部分。异常处理机制简化了代码中的错误检测。PL/SQL中任何异常出现时,每一个异常都对应一个异常码和异常信息。比如:

图1 PL/SQL中的异常

·预定义异常

为了Oracle开发和维护的方便,在Oracle异常中,为常见的异常码定义了对应的异常名称,称为预定义异常,常见的预定义异常有:

异常名称

异常码

描述

DUP_VAL_ON_INDEX

ORA-00001

试图向唯一索引列插入重复值

INVALID_CURSOR

ORA-01001

试图进行非法游标操作。

INVALID_NUMBER

ORA-01722

试图将字符串转换为数字

NO_DATA_FOUND

ORA-01403

SELECT INTO语句中没有返回任何记录。

TOO_MANY_ROWS

ORA-01422

SELECT INTO语句中返回多于1条记录。

ZERO_DIVIDE

ORA-01476

试图用0作为除数。

CURSOR_ALREADY_OPEN

ORA-06511

试图打开一个已经打开的游标

表6 PL/SQL中预定义异常

PL/SQL中用EXCEPTION关键字开始异常处理。具体语法是:

语法格式:异常处理

BEGIN

      --可执行部分

      EXCEPTION   -- 异常处理开始

      WHEN 异常名1 THEN

      --对应异常处理

       WHEN 异常名2 THEN

      --对应异常处理

      ……

       WHEN OTHERS THEN

      --其他异常处理

END;

语法解析:

异常发生时,进入异常处理部分,具体的异常与若干个WHEN子句中指明的异常名匹配,匹配成功就进入对应的异常处理部分,如果对应不成功,则进入OTHERS进行处理。

案例10 :异常处理

代码演示:异常处理

SQL> DECLARE

  2        newSal emp.sal % TYPE;

  3  BEGIN

  4        SELECT sal INTO newSal FROM emp;

  5  EXCEPTION

  6        WHEN TOO_MANY_ROWS THEN

  7            dbms_output.put_line('返回的记录太多了');

  8        WHEN OTHERS THEN

  9            dbms_output.put_line('未知异常');

 10  END;

 11  /

返回的记录太多了

PL/SQL procedure successfully completed

技术沙龙MORE+

标签错误:<!-- #Label# labelId=20160707140604 moduleId=1 classId=12231768634 orderby=2 fields=url,title,u_info attribute= datatypeId=22192428132 recordCount=3 pageSize= <htmlTemplate><dt><img src="/images/index_26${index}.jpg" width="100" height="62" /><a href="$url" title="${title}">${title}</a><span>${api.left(u_info,60)}</span></dt></htmlTemplate> -->
我要参加技术沙龙