1、定义
异常:PL/SQL在执行的过程中所产生的标识符,PL/SQL中的一个警告或错误都被称为异常。
错误通常分为两类:
编译时错误--一般是语法错误,由PL/SQL引擎发现并报告给用户,程序本身不能处理,因为还没运 行。
运行时错误--程序在运行时引发的错误,例如没返回结果与返回多个结果(只能返回一行结果的情 况下)
异常处理---通常是指处理运行时错误。
引发异常的一个重要原因是处理数据时发生错误。统计表明,SELECT语句、DML语句以及游标操作语 句更容易引发异常。
编写PL/SQL块的主要目的是处理数据,而PL/SQL块在逻辑上与数据是分开的,程序员根本无法预料 数据的变化。
例如,要查询部门10的员工,程序员根本不知道这个部门中有没有员工, 有一个还是有多个员工。
所以在编写程序时,程序员应该考虑各种可能出现的异常,在程序中编写这些异常的处理代码,这 样的程序才能经受各种错误的考验。
2、预定义异常
预定义异常:Oracle把一些常见的错误定义为有名字的异常,这就是预定义的异常。【有异常代码 ,异常名称,异常消息】
Oracle有许多预定义的异常,在进行处理时不需要再定义,只需要编写相应的异常处理程序即可。
当PL/SQL块执行发生错误时,数据库服务器将自动抛出相应的异常,并执行编写的异常处理程序。
预定义说明的 oracle 异常
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 没有找到数据
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-6511 Cursor-already-open 试图打开一个已存在的 游标
ORA-6530 Access-into-null 试图为null 对象的属性赋值