pl sql 学习笔记(三) 异常处理。

1、         异常处理:

|-- 异常处理用when   then …

|---自己抛出异常 raise_application_error和raise

|-- 一个异常当前没处理,可以传递到外包围。

|-- 未处理异常:用户没有处理的异常。

|-- 整数异常,exception_int (name,integer);这里主要是获取系统定义的异常。

完成的异常过程:

Declare

Exception_name exception  --定义一个异常;

Begin

      Do-something

      if  条件 then

       raise Exception_name –抛出前面定义的异常

end if;

exception

      when Exception_name then –扑捉前面的异常

       do-something

   when others then  --获取其他异常。

            do-something

end;

2、         内置的错误函数

|-- sqlcode:  =0 表示正常。 !=0 有各自的意思

   如:=-6502  (value_error)

|-- sqlerrm   输出上面对应的值: SQL error message 的缩写。最多可以返回512个字节。

如: dbms_output.put_line(sqlerrm(-6502)) --输出value_error

            |--DBMS_utility.format_error_stack 与sqlerrm相似。可以输出1899个字符。

            |--Dbms_utility.format_error_stackac :可以退回到最初错误出现的地方。

下面是调用子procedure 的过程,,已经执行   Dbms_utility.format_error_stackac 的结果。

create or replace procedure proc1 is

begin

       dbms_output.put_line('running proc1');

       raise no_data_found;    --异常抛出:

end;

 

create or replace procedure proc2 is

       l_str varchar2(20):='calling proc1';

begin

       dbms_output.put_line(l_str);

       proc1;                               --调用过程1

end;

 

create or replace procedure proc3 is

       l_str varchar2(20):='calling proc2';

begin

       dbms_output.put_line(l_str);

       proc2;                   --调用异常2

exception

       when others  --处理全部的异常。

       then

              dbms_output.put_line('error stack at topleverl');

             dbms_output.put_line(DBMS_utility.format_error_backtrace);    ---追踪异常,回到最开始的异常。

end;

 

 

begin

               dbms_output.put_line('3-2-1');

                proc3;    --调用前面的异常。

end;

 

输出结果:

3-2-1

calling proc2

calling proc1

running proc1

error stack at top leverl

ORA-06512: at "FENGGANG.PROC1", line 4

ORA-06512: at "FENGGANG.PROC2", line 6

ORA-06512:at "FENGGANG.PROC3", line 6

执行过程如下:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值