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

原文地址:https://www.cnblogs.com/ac1985482/p/2817612.html