zoukankan      html  css  js  c++  java
  • 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来捕捉它了。

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

  • 相关阅读:
    3名百度 ,京东,腾讯被辞退的高级Android工程师现在怎么了?30岁真的是“罪”吗
    Python 开发者在迁移到 Go 前需要知道的事情
    centos7 常用命令--查看当前用户的4种方法
    Centos7找不到ifconfig和netstat命令
    Centos 7 修改日期和时间的命令
    如何利用MobaX同时处理多台虚拟机输入相同命令如何利用MobaX同时处理多台虚拟机输入相同命令
    配置坑了我好久:Logback按天生成文件失效
    quartz系列文章
    SpringBoot使用多实例QUARTZ出现重复执行问题
    IDEA多个springboot项目启动修改端口
  • 原文地址:https://www.cnblogs.com/kingsleylam/p/3029829.html
Copyright © 2011-2022 走看看