oracle异常分为,Oracle异常分类小记

本文介绍了Oracle异常处理的分类,包括具名Oracle异常、匿名Oracle异常和自定义异常,并通过示例展示了如何处理这些异常。自定义异常分为普通自定义异常和应用程序异常(Raise_Application_Error),后者允许自定义异常号和信息。
摘要由CSDN通过智能技术生成

Oracle异常分类小记以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

89bfad03762d27b8c0bde4e88aa2ddf4.png

前几天看《Oracle PL/SQL Programming》的异常处理部分 粗粗看了一遍 觉得有点乱 根据自己的理解作了一下分类 并相应给了一些简例 不一定很准确 供参考

Oracle异常

具名Oracle异常

Oracle为此类异常预先指定了异常号 异常信息 异常名称

匿名Oracle异常

Oracle为此类异常预先指定了异常号 异常信息 但未指定异常名称

自定义异常

普通自定义异常

与Oracle无关的业务逻辑异常 无异常号 异常信息 异常名称需要手工声明

应用程序异常(Raise_Application_Error)

与Oracle无关的业务逻辑异常 此方法抛出的异常可以自定义异常号及异常信息 可以通过Exception_Init绑定到手工声明的异常名称上

)Oracle异常

Oracle异常总是由Oracle检测并自动抛出的

)具名Oracle异常

Oracle定义了 个具名的Oracle异常 比如

Dup_val_on_index(ora )当中唯一索引所对应的列上键入重复值时

No_data_found(ora )执行select into未返回行 或者引用了索引表未初始化的元素时

流程

A)在Exception模块按异常名进行处理

示例

DECLARE

num number;

BEGIN

num:= / ;

EXCEPTION

when ZERO_DIVIDE then

dbms_output put_line(SQLERRM);

END;

/

ORA : divisor is equal to zero

PL/SQL procedure successfully pleted

)匿名Oracle异常

Oracle中存在大量匿名的异常 比如

ORA : parent key not found

由于PL/SQL的异常处理模块只接受异常名称 不接受异常号(除了WHEN OTHERS语句 它可以捕获任意异常 不论你是否具有异常名称) 为便于处理 需要手工为其指定异常名称

流程

A)声明异常

B)将此异常绑定到Oracle异常号上

C)在Exception模块按异常名进行处理

示例

DECLARE

ex EXCEPTION;

PRAGMA EXCEPTION_INIT(ex );

BEGIN

insert into t values( );

EXCEPTION

when ex then

dbms_output put_line(SQLERRM);

END;

/

ORA : integrity constraint (ADMIN FK ) violated parent key not found

PL/SQL procedure successfully pleted

)自定义异常

自定义异常总是开发者显式抛出来的

)普通自定义异常

流程

A)声明异常

B)使用Raise语句抛出异常

C)在Exception模块按异常名进行处理

示例

DECLARE

ex EXCEPTION;

BEGIN

RAISE ex;

EXCEPTION

when ex then

dbms_output put_line(SQLERRM);

dbms_output put_line( i raised a user defined exception ex );

END;

/

User Defined Exception

i raised a user defined exception ex

)应用程序异常Raise_Application_Error(Num Msg)

普通自定义异常既没有异常号(SQLCODE一律为 ) 也不能指定异常信息(SQLERRM一律为 User Defined Exception ) 如果想要为自定义异常指定异常号与异常信息 需要借助Raise_Application_Error(Num Msg)函数 这里的Num即异常号 范围是[ ] Msg则是异常信息

对于此类异常 由于Num是自定义的 因此应该有相应的管理办法以避免重复使用异常号 比如可以将已使用的异常号保存在一张数据库中表 以便将来检查

流程

A)声明异常

B)将此异常绑定到自定义的异常号上

C)使用Raise_Application_Error(Num Msg)抛出异常 同时指定了异常号及异常信息

D)在Exception模块按异常名进行处理

示例

CREATE OR REPLACE PROCEDURE mtest

is

ex EXCEPTION;

PRAGMA EXCEPTION_INIT(ex );

BEGIN

Raise_Application_Error( raising my exception );

EXCEPTION

when ex then

dbms_output put_line(SQLERRM);

END;

/

Procedure created

SQL> exec mtest

ORA : raising my exception lishixinzhi/Article/program/Oracle/201311/18175

分页:123

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值