pl/sql学习笔记之五 错误管理 error mgt

1、编译时错误主要集中在一下几点:
    语句忘记";";拼写错误;注释错误;
2、运行时错误
    declaration块的错误不能被local exception捕获;最容易捕获的错误是从运行块(exec block)发生的错误,因为此错误首先被local exception捕获,接着是包容块进行捕捉。
    只有外部excetpion 才能捕捉local exception的运行时错误。
    Exception块包含WHEN块,WHEN块的定义如下:
    WHEN {predefined_exception | user_defined_exception | OTHERS} THEN
             exception_handling_statement;
    [RETURN | EXIT ];
    Exception 内建函数。
    SQLCODE:返回-20001~-20999,每个值对应一个确定的oracle预定义错误,没有错误则返回1,NO_DATA_FOUND除外,返回100;
    SQLERRM:返回oracle错误代码和出错信息。

    系统预定义的错误在SYS.STANDARD包里面;

    手动触发Exception: Raise e,将控制权交给Exception handler;
    最佳实践:Good PL/SQL coding practices avoid dynamic assignments in declaration blocks.
3、用户自定义Exception
    可以在declaration 块声明一个EXCEPTION 变量,也可以在执行快动态创建exception;

    declaration块中声明exception demo1
    DECLARE
       e EXCEPTION;
    BEGIN
       RAISE e;
       dbms_output.put_line('Can''t get here.');
    EXCEPTION
       WHEN OTHERS THEN
          IF SQLCODE = 1 THEN
              dbms_output.put_line('This is a ['||SQLERRM||'].');
          END IF;
    END;
    用户定义exception返回SQLCODE默认是1,所以可以在exception块中用此值。
    demo2
    分为两步,首先定义exception,接着将此exception与一个数值关联,如下:
    DECLARE
          a VARCHAR2(20);
          --定义exception
          invalid_userenv_parameter EXCEPTION;
          --将此exception变量与-2003关联
          PRAGMA EXCEPTION_INIT(invalid_userenv_parameter,-2003);
    BEGIN
          a := SYS_CONTEXT('USERENV','PROXY_PUSHER');
    EXCEPTION
         WHEN invalid_userenv_parameter THEN
            dbms_output.put_line(SQLERRM);
    END;
    执行后结果即为:ORA-02003: invalid USERENV parameter.


4、Exception处理的两条路径:
    当exception为fatal error引起,会影响到业务逻辑的正确性时,考虑结束并恢复数据;当exception为非fatal error引起时,应该让此次事务完成(complete),并记录到日志。






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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值