zoukankan      html  css  js  c++  java
  • 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;
  • 相关阅读:
    PAT顶级 1002. Business (35)
    Codeforces Round #417 (Div. 2) B. Sagheer, the Hausmeister
    Codeforces Round #417 (Div. 2) C. Sagheer and Nubian Market
    主席树模板poj 2104
    Java 集合相关
    扁平疣病治疗
    一些网址
    在ubuntu14.04设置静态ip
    在Ubuntu14.04下安装vsftp服务器
    移植SDL运行库到Tiny6410 上
  • 原文地址:https://www.cnblogs.com/jiaxinwei/p/10319156.html
Copyright © 2011-2022 走看看