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

Oracle例外处理

2015-11-27 20:59 363 查看

Oracle例外处理

在pl/sql的执行过程中发生异常时系统所作的处理称为一个例外情况(exception)。通常例外情况的种类有三种:
1、预定义的oracle例外情况oracle预定义的例外情况大约有24个,对于这种例外情况无需在程序中定义,由oracle自动地触发(重点)
2、非预定义的oracle例外情况由使用者增加定义例外情况,然后oracle自动将其触发执行。
3、自定义例外,这个用的较少。

自定义例外的基本语法:
exception
when <异常情况名> then
<异常处理代码>
when <异常情况名> then
<异常处理代码>
...
when others then
<异常处理代码>

捕获异常的两个目的:
1、给用户提示更加明确,方便对过程优化;
2、可能需要对异常进行业务处理。
--例外处理
--编写过程,接受员工的编号,并显示该员工的姓名,如果员工不存在,则进行异常处理
create or replace procedure p20(v_in_empno emp2.empno%type) is
v_ename emp2.ename%type;
begin
  select ename into v_ename from emp2 where empno = v_in_empno;
  dbms_output.put_line('名称是:' || v_ename);
exception
  when NO_DATA_FOUND then
    dbms_output.put_line('输入的编号不存在');
  when others then
    dbms_output.put_line('错误类型未知');
end;
/


预定义说明的部分ORACLE异常错误
错误号

异常错误信息名称

说明

ORA-0001

Dup_val_on_index

违反了唯一性限制

ORA-0051

Timeout-on-resource

在等待资源时发生超时

ORA-0061

Transaction-backed-out

由于发生死锁事务被撤消

ORA-1001

Invalid-CURSOR

试图使用一个无效的游标

ORA-1012

Not-logged-on

没有连接到ORACLE

ORA-1017

Login-denied

无效的用户名/口令

ORA-1403

No_data_found

SELECT INTO没有找到数据

ORA-1422

Too_many_rows

SELECT INTO 返回多行

ORA-1476

Zero-divide

试图被零除

ORA-1722

Invalid-NUMBER

转换一个数字失败

ORA-6500

Storage-error

内存不够引发的内部错误

ORA-6501

Program-error

内部错误

ORA-6502

Value-error

转换或截断错误

ORA-6504

Rowtype-mismatch

宿主游标变量与 PL/SQL变量有不兼容行类型

ORA-6511

CURSOR-already-OPEN

试图打开一个已处于打开状态的游标

ORA-6530

Access-INTO-null

试图为null 对象的属性赋值

ORA-6531

Collection-is-null

试图将Exists 以外的集合( collection)方法应用于一个null pl/sql 表上或varray上

ORA-6532

Subscript-outside-limit

对嵌套或varray索引得引用超出声明范围以外

ORA-6533

Subscript-beyond-count

对嵌套或varray 索引得引用大于集合中元素的个数.

ORA-6592

CASE_NOT_FOUND

Case条件结构里面没有对应选项

处理多个例外

set serveroutput on;
declare
	var_name varchar(60);
begin
	select ename into var_name from emp
	where deptno=&deptno;
exception
	when no_data_found then
		dbms_output.put_line('没有匹配数据!');
	when too_many_rows then
		dbms_output.put_line('返回多行数据!');
	when others then
		dbms_output.put_line('提示错误不明!');
end;


----------参考《韩顺平玩转Oracle》
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: