zoukankan      html  css  js  c++  java
  • 异常处理基本语法


    任何一种编程语言中的异常处理部分都是比较重要的一部分,单独学习一下。
     
     
    一、异常的种类及基本用法:
     
    1、预定义异常(总计21种,具体见文档)
     
        使用方法:

        BEGIN

          SELECT ...

          SELECT ...

          SELECT ...

           ...

        EXCEPTION  

        WHEN NO_DATA_FOUND THEN ...
     
        常用类型:

        NO_DATA_FOUND       --ORA-01403-- 未找到行

        TOO_MANY_ROWS       --ORA-01422--SELECT INTO 语句返回多行数据

        VALUE_ERROR         --ORA-06502-- 类型转换错误

        ZERO_DIVIDE         --ORA-01476-- 程序尝试除以 0

     STORAGE_ERROR       --ORA-06500--PL/SQL 运行时内存溢出或内存不足
     

    2、非预定义异常(EXCEPTION_INIT )

     

        方法一:

        需要在declare中申明,申明后使用即与预定义异常相同

        declare

          e_deptno_remaining exception ;

           PRAGMA EXCEPTION_INIT (e_deptno_remaining, - 2292 );

        begin

        ...

        exception

        when e_deptno_remaining then

        dbms_output.put_line( ' 非预定义2292 ' );

        when others then

        dbms_output.put_line( 'others' );

        end ;
     

    -2292必须是Oracle自定义的错误号,前面加负号

    如果需要自己设定,则必须在-20000——-20999之间

    此方法无法定义异常信息。

     

        方法二:

        错误号与错误信息均可自己定义

        且无需在declare和exception中声明

        declare

          i int := 5;

        begin

         if i=5then

         raise_application_error (-20086/*-20000——-20999*/, '自定义错误信息');

         endif;

        end;

     
    3、自定义异常(分为declare、raise、exception三部分)
     
        使用示例:

        declare

          i int := 3;

          ex exception;

        begin

          if i <=2then

          raise ex;

          else dbms_output.put_line(i);                             

          endif;

        exception

          when ex then

          dbms_output.put_line('xxx');

        end;

     

     

    二、注意使用Others的异常类:

     

        在EXCEPTION中定义任何的异常后

        尽量都使用when others 表示遭遇到除此之外的任何异常如何处理

     

        EXCEPTION

          WHEN exception_name1 THEN   -- handler

            sequence_of_statements1

          WHEN exception_name2 THEN   -- another handler

            sequence_of_statements2

            ...

          WHENOTHERSTHEN            -- optional handler

            sequence_of_statements3

        END;

     
        另外,在EXCEPTION中可以使用OR链接

        WHEN over_limit OR under_limit OR VALUE_ERROR THEN

     

     

    三、使用系统错误号和错误信息

     

        错误号----SQLCODE;

        错误信息--SQLERRM;

        DECLARE

          err_num   NUMBER;

          err_msg   VARCHAR2(100);

        BEGIN

          ...

        EXCEPTION

          WHENOTHERSTHEN

            err_num    := SQLCODE;

            err_msg    := SUBSTR(SQLERRM, 1, 100);

            dbms_output.put_line(err_num || '---' || err_msg);

        END;
     

     

    四、异常传播的规则
     

        首先,异常是会向他的外层进行传递的

        即如果在当前子块中未定义异常处理,则会传递到外层的异常处理

        直到异常被捕获或最终被抛弃

     

        注:声明中的异常必定无法被当前块捕获

        DECLARE

        Abc number(3):='abc';

        ...

        BEGIN

        ...

        EXCEPTION

        WHENOTHERSTHEN

        ...

        END;----即便使用others最终也无法捕获

  • 相关阅读:
    eIQ WSL下工具及环境配置
    WSL配置高翔vslam环境配置流水账
    机器学习原理/模型/应用
    Spring+Quartz(定时任务)
    vim常用操作
    Linux使用ssh公钥实现免密码登录Linux
    svn常用操作
    Jquery Html方法失效的问题
    运算符&&与||的用法
    CSS强制不换行[转帖]
  • 原文地址:https://www.cnblogs.com/akami/p/6933556.html
Copyright © 2011-2022 走看看