异常是oracle 数据库中的 PL/SQL 代码在执行期间出现的错误。无论任何时候,当PL/SQL引擎执行代码时,都可能会遇到异常,当产生异常时,PL/SQL会将程序控制转到程序块的异常处理部分。
如果在程序块中没有异常处理,那么异常就会传播,或者发往程序块德调用者。
Oracle 有3种类型的异常
l 预定义异常
对这种异常的处理,无须在程序中定义,由oracle 自动将其引发
l 非预定义异常
即其他标准的oracle 错误。对这种异常的处理,需要用户在程序中定义然后由oracle 自动将其引发。
l 自定义异常
如果程序设计人员认为某种情况违反了业务逻辑,则设计人员可明确定义并引发异常
异常处理部分一般放在PL/SQL程序的后半部分,其结构如下:
EXCEPTION
WHEN first_exception THEN <code to handle first exception>
WHEN second_exception THEN <code to handle second exception>
WHEN OTHERS THEN <code to handle orthers exception>
END;
预定义异常
我们现在以已存在主键进行添加数据时捕获异常为例
SQL> set serveroutput on;
SQL>
SQL> begin
2 insert into emp(empno,ename,job,deptno)
3 values('7394','Longmanfei','stu',20);
4 exception
5 when dup_val_on_index then //dup_val_on_index注意这个异常的定义是oracle 规定的专门针对这种插入主键重复数据的
6 dbms_output.put_line('捕获到了异常');
7 dbms_output.put_line('该主键已存在');
8 end;
9 /
捕获到了异常
该主键已存在
PL/SQL procedure successfully completed
下面列举一下oracle 预定义的 异常
DUP_VAL_ON_INDEX
|
试图破坏一个唯一性限制
|
Timeout-on-resource
|
在等待资源时发生超时
|
Transanction-backed-out
|
由于发生死锁,事务被撤销
|
Invalid-CURSOR
|
视图使用一个无效的游标
|
Not-logged-on
|
没有连接到oracle
|
Login-denied
|
无效的用户名/口令
|
NO_DATA_FOUND
|
Select into 没有找到数据
|
TOO_MANY_ROWS
|
Select into 返回多行
|
Access-INTO-null
|
试图为null对象的属性赋值
|
等等
|
|
非预定义异常
对于非预定义异常,必须先对定义的oracle 错误进行定义
1. <异常情况> exception
例如定义一个 Fk_DELETE EXCEPTION
2. 使用exception_into 语句将已定义好的异常情况与标准的oracle 错误联系起来
PRAGMA EXCEPTION_INTO(<异常情况>,<错误代码>);
自定义异常
<异常情况> exception
PAISE <异常情况>
之后
Declare
ex_update exception;
Begin
Update 商品信息
Set 单价=单价-100
Where 商品编号='1030';
If sql%notfound then
RAISE ex_update;
End if;
Exception
When ex_update then
dbms_output.put_line('捕捉到自定义异常');
dbms_output.put_line('未更新任何行');
End;
/
<!--EndFragment-->
分享到:
相关推荐
oracle笔记异常处理,异常处理的代码案例和知识点笔记!
ORACLE异常处理剖析.pdf
详细介绍 ORACLE 异常错误处理异常错误处理异常错误处理
这个是oracle课成异常处理章节后面的部分习题答案,大概四五道题的答案。
Oracle 异常处理。即使是写得最好的PL/SQL程序也会遇到错误或未预料到的事件。一个优秀的程序都应该能够正确处理各种出错情况,并尽可能从错误中恢复。任何ORACLE错误(报告为ORA-xxxxx形式的Oracle错误号)、PL/SQL...
oracle异常处理 把各种异常和解决方式总结出来了
oracle 异常处理剖析共.pdforacle 异常处理剖析共.pdforacle 异常处理剖析共.pdforacle 异常处理剖析共.pdforacle 异常处理剖析共.pdf
Oracle 存储过程异常处理.docx
oracle异常处理步骤自己总结的,不太成熟,大家可以不看,只是我的备忘录
归纳整理部分Oracle异常问题,及解决办法 1、 ORA-12651:TNS:没有监听器 2、 ORA:-12545:因目标主机和对象不存在,连接失败 3、。。。。。。。。
NC的Oracle优化及异常数据处理NC的Oracle优化及异常数据处理
oracle预定义异常, ORACLE开发存储过程,函数,触发器等程序时,会经常使用到异常处理,该文档列举了常见的异常以及异常说明
Oracle_存储过程exception异常处理大全及实例经典最终.docx
oracle游标和异常处理、函数、存储过程和包的说明 并带有实际操作的语句
Oracle数据库因断电导致异常的解决方案,如:数据库服务开着,监听正常,但是连接数据库不成功,或者连接上无法查询数据,报错:ORA-01034: ORACLE not available
福建电脑期刊2013年第2期的一篇论文 oracle scn增长过快问题研究和解决方案探索 易金旭
ORACLE 用户自定义异常小例子 1.进入pl/sql测试窗口 2.执行语句 declare empname varchar2(255); customize_exp EXCEPTION; –自定义异常 begin FOR c IN (select d.* from scott.dept d) ...
Oracle数据库中的异常:没有...4.多异常处理:Java的多异常是通过数据类型区分,Oracle数据库的多异常是通过异常编号区分。 区别不同的异常是实现多异常处理前提。 declare verror exception;–定义异常变量
Oracle 9i启动异常处理.pdf