oracle存储过程异常处理 RAISE_APPLICATION_ERROR——异常处理

异常处理通常用于测试

我们都是通过dbms_output.put_line输出异常信息,但在实际应用中,需要将异常信息返回给调用客户端。

事实上,RAISE_APPLICATION_ERROR将应用程序特定的错误从服务器传输到客户端应用程序(SQLPLUS或其他机器上的其他前端开发语言)

raise_application_error(异常类型,传输信息)

异常类型:number() 值范围:-20000 到 -20999

传递信息:varchar2(2000)

DBMS_STANDARD包的RAISE_APPLICATION_ERROR过程可以重新定义异常错误消息,这为应用程序与ORACLE交互提供了一种方式。语法如下

RAISE_APPLICATION_ERROR(错误编号,错误字符串)

errorNumber 是-20000 到-20999 之间的一个值,errorString 是自定义的错误消息。

喜欢:

更新作业集 job_title = v_newJobTitle 其中 job_id = v_jobid;

如果 sql%notfound 那么

RAISE_APPLICATION_ERROR(-20167,'更新失败!');

结束如果;

…………

在 sqlpus 中测试时,一旦没有要更新的行oracle存储过程异常处理,就会抛出如下异常:

ORA-20167: 更新失败!

Oracle的异常分为编译时异常(错误)和运行时异常。前者不能处理,后者可以处理。

我们主要讨论运行时异常。

异常类型:

一个。预定义的异常

命名的预定义异常包括 CURSOR_ALREADY_OPEN、INVALID_NUMBER、TOO_MANY_ROWS 等。

b.用户定义的异常

c.命名异常(命名异常不能被归类为单独的异常类别,但它们有点特殊,所以我将它们单独列出)

如果要处理异常(由when子字符串处理),那么异常必须有一个名称,例如TOO_MANY_ROWS;

有数千个数据库错误,但不到 25 个是内置命名异常(这些异常在标准包中声明);

要处理未命名的异常,您可以将名称与错误号相关联。实现这一点的语句是 pragma exception_init 语句;

抛出异常:

一个。通过pl/sql运行引擎

当数据库或PL/SQL在运行时发生错误时,PL/SQL运行时引擎会自动抛出异常。

b.使用 raise 语句

也可以通过raise语句抛出异常:raise exception_name;

c.调用 raise_application_error 存储过程

异常处理和异常传播:

一个。程序一旦进入异常部分,就无法返回到同一块的执行部分;当异常处理完毕后,控制权返回到外层执行部分的下一条语句;

b.如果有when other子串,则必须将其放在末尾作为默认处理器,以处理未显式处理的异常;

c.执行部分抛出的异常会首先传递给同一个块的异常部分。如果同一块的异常部分没有处理器来处理该异常,则该异常将向上层的异常部分传播,直到结束。外层;

d.异常处理完后,如果还想让它继续传播,可以在异常处理结束时执行不带参数的raise语句(raise语句会重新抛出已经发生的异常,让其继续传播);

–这是上面一些知识点的示例(伪代码)解释

宣布

user_define_exception异常; –用户自定义异常

invalid_column_name 异常;

–补充说明:如果我们在程序块中使用了无效的列名,括号中将会出现错误信息(ORA-00904:无效的列名)

–接下来我们把这个异常代码号和我们自定义的异常关联起来,也就是给异常命名。

pragma exception_init(invalid_column_name,-904);

开始

–引发用户定义异常; — 可以显式引发异常

例外

when TOO_MANY_ROWS then –预定义的异常处理

…;

when user_define_exception then –用户定义的异常处理

…;

when invalid_column_name then –PRAGMA EXCEPTION_INIT 异常处理

…;

增加; –继续传播异常

结尾;

sqlcode 和 sqlerrm:

一个。处理数据库错误的另一种方法是使用内置函数sqlcode和sqlerrm;

b. sqlcode 将返回当前数据库错误号。这些错误号中,除了no_data_found为+100外,其余均为负数;

c. sqlerrm 返回文本中描述的错误消息;

d.为了获取用户自定义异常返回的sqlerrm和sqlcode,您需要使用raise_application_error函数为自定义异常标记错误号。

数量自定义错误:

一个。 raise_application_error内置函数用于抛出异常,并为异常分配错误号和错误消息;

b.自定义异常默认错误号为+1,默认信息为user_define_exception。来自未处理异常的一般信息对于识别导致错误的原因没有帮助,

c.可以在pl/sql程序块的执行部分和异常部分调用raise_application_error函数来显式抛出带有特殊错误号的命名异常;

d.使用语法:raise_application_error(error_no,error_message[,{true|| false}]);

e.错误编号范围为-20,001至-20,999;错误消息是一个文本字符串oracle存储过程异常处理,最多 2048 字节; true 和 false 表示是否添加(true)到错误堆栈(error stack)或覆盖(overwrite)错误堆栈(false)。默认为 false。

© 版权声明
THE END
喜欢就支持一下吧
点赞195赞赏 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容