zoukankan      html  css  js  c++  java
  • oracle plsql 捕获异常和抛出异常

    在写oracle存储过程的时候很多东西放到存储过程里面比如一些判断等,要比在程序逻辑里面简单很多,但是也会涉及到捕获和抛出一样的问题。

    捕获异常

    语法:

       

     EXCEPTION
        WHEN excepttion_name1 then
          ........
        WHEN excepttion_name2 then
         ........
        WHEN excepttion_name3 then
         ........
     End;

    例子:

    declare 
        a  int:=0;
        b int:=1;
       ex_1 exception;
       ex_2 exception;
      
    begin  
       if a=0 then
        raise ex_1;
        end if;
        
        if b=1 then 
          raise ex_2;
        end if;
        
        exception
          when ex_1 then
             DBMS_OUTPUT.put_line('捕获了错误1');
          when ex_2 then 
             DBMS_OUTPUT.put_line('捕获了错误2');
     end;

    输出:

    捕获了错误1

    这里由于在ex_1的地方就出现了错误 ,所以下面ex_2没有执行,而是直接跳到错误处理的代码部分了。在Oracle中不允许一个异常由多个异常处理块来处理。

    利用OhtERS处理所有的错误

    declare 
        a  int:=0; 
       ex_1 exception; 
    begin  
       if a=0 then
        raise ex_1;
        end if;
         
        exception 
          when others then
            DBMS_OUTPUT.put_line('捕获了全局错误');
     
     end;


    输出:image

    抛出异常

    RAISE_APPLICATION_ERROR 函数

             该函数是将应用程序专有的错误从服务器端转达到客户端应用程序(其他机器上的SQLPLUS或者前台开发语言)

    PROCEDURE RAISE_APPLICATION_ERROR( error_number_in IN NUMBER, error_msg_in IN VARCHAR2);
        error_number_in :自定义的错误码,容许从 -20000 到 -20999 之间,这样就不会与 ORACLE 的任何错误代码发生冲突。
        error_msg_in:长度不能超过 2k,否则截取 2k

               例子:让一个数不能为0

    declare 
      a int:=0;
    begin 
       if a=0 then 
          RAISE_APPLICATION_ERROR(-20001,‘数值不能为0’);
        end if; 
    end;


    运行:

    image

  • 相关阅读:
    [BJOI2015]树的同构 && 树哈希教程
    「HNOI2014」世界树
    CF613D Kingdom and its Cities
    「HEOI2014」大工程
    虚树教程
    [SDOI2011]消耗战
    CF1216E Numerical Sequence
    vim8.1安装
    luoguP5024 保卫王国
    动态DP教程
  • 原文地址:https://www.cnblogs.com/ac1985482/p/2817612.html
Copyright © 2011-2022 走看看