• Oracle SQL存储过程结构、异常处理示例


    --  存储过程结结构。
    --  EXCeption不是存储过程必须部分,可以用作本存储过程的异常处理,但如果没有异常处理,出了异常将会终止程序
    CREATE PROCEDURE procedure_name ()
    IS/AS
    BEGIN
      -- ....
      EXCEPTION 
        -- ...
    END;
    
    --  PL/SQL代码块是什么? 
    --  下面就是。
    --  EXCeption不是PL/SQL必须部分,可以用作本PL/SQL代码块的异常处理,但如果没有异常处理,出了异常将会终止程序
    BEGIN
      -- ....
      EXCEPTION 
        -- ...
    END;
    
    -- ======================================
    ----  昨天说,一个存储过程里可以有多个PL/SQL代码块
    -- ======================================
    --也就是说可以这样
    CREATE PROCEDURE procedure_name ()
    IS/AS
    BEGIN
      -- .PL/SQL代码块 1:
           BEGIN
      -- .... 
         -- 此处出了异常,
        -- 因为作了处理,本代码块将不执行,但程序可以继续
        -- 也就是说  PL/SQL代码块2 ,PL/SQL代码块3还可以执行
              EXCEPTION --异常处理
        -- ...
           END;
           
          -- .PL/SQL代码块 2:
          BEGIN
          -- ....如果此处出了异常,
          -- 因为本PL/SQL 未做异常处理,那么就只有两种结果
          -- 1、存储过程有异常处理,可以处理这个异常,于存储过程的异常处理来说,只要进了这个异常,本PL/SQl代码做完异常处理后,程序也将无法继续
          -- 2、存储过程有异常处理但无法处理该异常,或者存储过程没有异常处理,程序出错,将无法继续执行
          -- 上面两种情况都会导致 ,程序无法继续,简单说, PL/SQL代码块3不会执行
           END;
          
           -- .PL/SQL代码块 3:
          BEGIN
            --...
              EXCEPTION
               --..
           END;
        -- ... 存储过程的异常处理 
      EXCEPTION 
        -- ...。。
    END;

     eg:

    DECLARE 
     v_my_err EXCEPTION;
     v_i INTEGER ;
    BEGIN
       FOR v_i IN 1..10
          LOOP    
             BEGIN 
                 IF v_i=3 THEN
                     RAISE v_my_err;
                 ELSE 
                     dbms_output.put_line(v_i);
                 END IF;
                 EXCEPTION
                    WHEN v_my_err THEN
                        dbms_output.put_line('我有异常处理,下面的继续');
             END;
             
             BEGIN 
                 IF v_i=6THEN
                        dbms_output.put_line('我没有异常处理,出了异常下面的不执行');
                     RAISE v_my_err;
                 ELSE 
                     dbms_output.put_line(v_i);
                 END IF;
             END;
          END LOOP;
    EXCEPTION
       WHEN OTHERS THEN 
           dbms_output.put_line('出了异常,结束');
    END;
  • 相关阅读:
    My Vim
    POJ 3292 Semi-prime H-numbers
    洛谷P3954 成绩【民间数据】
    数据结构—栈/队列
    说服式设计(persuasive design)的行为模型
    发送邮件给某人:mailto标签
    如何识别和利用用户情绪
    HDU Good Numbers (热身赛2)
    atlas z 轴
    什么叫“默认邮件客户端没有正确安装”?
  • 原文地址:https://www.cnblogs.com/jiaxinwei/p/10319156.html
Copyright © 2020-2023  润新知