Oracle示例 SQL_Exception

测试异常处理、抛出

  

在写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

 

--eg:

declare

  a int:=0;

begin

   if a=0 then

      RAISE_APPLICATION_ERROR(-20001,'数值不能为0');

    end if;

end;

 

 

--例如

CREATE OR REPLACE FUNCTION get_number(s in varchar2)  return number is  

d number;

begin 

  begin

   d := to_number(s);

   exception

      when others then

      d:=0;

      end;

return d;

end;

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值