Oracle pl/sql编程 17---异常处理

来源:转载


异常的基本概念

在PL/SQL的执行过程中发生异常时系统所作的处理称为一个例外情况(exception)。通常例外情况的种类有三种:

• 预定义的ORACLE 例外情况ORACLE 预定义的例外情况大约有24个,对于这种例外情况无须在程序中定义,由ORACLE 自动地触发。(重点)

• 非预定义的ORACLE 例外情况由使用者增加定义例外情况,然后ORACLE自动将其触发执行。

• 自定义例外,这个用的较少。

<span style="font-size:24px;">ExceptionWhen <异常情况名>then<异常处理代码>When <异常情况名>then<异常处理代码>……when others then<异常处理代码></span>



例外传递

如果不处理例外我们看看会出现什么情况:

案例,编写一个过程,可接收雇员的编号,并显示该雇员的姓名.

 

问题是,如果输入的雇员编号不存在,怎样去处理呢?

如果是在SQL/PLUS中使用程序 在程序中我们没有对列外进行处理,程序就会将异常抛给SQL/PLUS,SQL/PLUS的处理方式就是将其打印出来



ORACLE预定之例外情况的处理,下列出常见几个

例外情况名   错误代码  描述

NO_DATA_FOUND   ORA-01403   对于SELECT叙述没有传回任何值。

TOO_MANY_ROWS  ORA-01427   只允许传回一笔记录的SELECT叙述结果却多于一笔。

INVALID_CURSOR   ORA-01001   使用非法的的光标操作。

VALUE_ERROR      ORA-06502   出现数值、数据形态转换、撷取字符串或强制性的错误。

INVALID_NUMBER   ORA-01722   字符串到数值的转换失败。

ZERO_DIVIDE     ORA-01476   被零除。

DUP_VAL_ON_INDEX ORA-00001   试图向具有唯一键值的索引中插入一个重复键值。

CASE_NOT_FOUND  ORA-xxxxx  没有case条件匹配

CURSOR_NOT_OPEN ORA-xxxxxx  游标没有打开



如何处理多个的例外


set serveroutput on;declarevar_name varchar(60);beginselect ename into var_name from empwhere deptno='10';exceptionwhen no_data_found thendbms_output.put_line(' 没有匹配数据!');when too_many_rows thendbms_output.put_line('返回多行数据!');when others thendbms_output.put_line('提示 错误不明!');end;




分享给朋友:
您可能感兴趣的文章:
随机阅读: