PL/SQL 异常高级概念

做好了准备想要接受难一点的概念,结果发现,其实这一章很水。

1. raise_application_error

raise_application_error 是Oracle提供的一种特殊的内置过程,允许程序员为特定应用程序创建有意义的错误消息,也即自定义。语法如下:

raise_application_error(error_number,error_message);

or

raise_application_error(error_number,error_message,keep_errors);

error_number是与特定错误消息相关联的错误编号,这个编号的范围在-20999到-20000之间(避免与内置编号冲突)。

keep_errors是boolean类型,决定是否加入错误栈(true)或者替换错误栈(false)。默认是false。

示例如下:

复制代码
 1 declare
 2   a number;
 3 begin
 4   a := -1;
 5   if a < 0 then
 6      raise_application_error(-20000, 'its negative');
 7   else
 8      dbms_output.put_line('its NOT negative');
 9   end if;
10 end;
复制代码

注意在最后已经不用去捕获了,因为已经在第6行的时候捕捉到了异常。在PL/SQL中会弹出报错的对话框。

 

 

报错信息由用户自定义。

 

2.exception_init 编译指令

在有些情况下,程序需要处理具有特殊编号的Oracle错误,而不是根据名称来引用它。或者说,用户希望自定义错误的名称。这时,可以使用名为编译指令的结构。

使用exception_init编译指令,可以把某个Oracle错误编号与用户的自定义名称建立关联。

语法如下:

declare

  exception_name exception;

  pragma exception_init(exception_name, error_code);

先看看不用编译指令的情况下的捕捉异常:

1 declare
2   a number;
3 begin
4   a := 'a';
5   dbms_output.put_line('can u see me?');
6 exception
7   when value_error then dbms_output.put_line('exception here');
8 end;

value_error是内置的错误名称,这样做也没有什么问题。如果用编译指令的话,如下:

复制代码
 1 declare
 2   a number;
 3   ex exception;
 4   pragma exception_init(ex, -6502);
 5 begin
 6   a := 'a';
 7   dbms_output.put_line('can u see me?');
 8 exception
 9   when ex then dbms_output.put_line('exception here');
10 end;
复制代码

编译了一个异常,-6502是错误编号,而value_error是内置与之关联的错误名称。如此一来,就可以将value_error改为ex了,也可以在异常处理中使用ex来捕捉它了。

不过这样好像也没什么大作用啊……

posted @   kingsleylam  阅读(282)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示