• Oracle循环语句


    PL/SQL有四种类型的循环:简单循环、WHILE循环、FOR循环以及游标FOR循环。在这里我们主要讨论前三种,除此之外,还将讨论Oracle 11g中新引入的CONTINUE语句。

    一、 简单循环

           LOOP
                 STATEMENT 1;
                 STATEMENT 2;
                 ...
                 STATEMENT N;
            END LOOP;

            上述语句会无限制执行,因为没有语句指定何时可以终止循环。因此,简单循环称为无限循环。

            一般循环会有退出条件。退出条件有两种形式:EXIT 和 EXIT WHEN。l两者是等价的。语法分别如下:

            LOOP                                               LOOP 
                  STATEMENT 1;                                  STATEMENT 1;
                  STATEMENT 2;                                  STATEMENT 2;
                  IF   CONDITION  THEN                        EXIT WHEN CONDITION;
                        EXIT;                                   END LOOP;
                  END IF;
             END LOOP;

             如下所示:

    DECLARE
       v_counter BINARY_INTEGER := 0;
    BEGIN
       LOOP
          v_counter := v_counter+1;
          DBMS_OUTPUT.PUT_LINE('v_counter = '||v_counter);
          IF v_counter = 5 THEN       -->> EXIT语句
             EXIT;
          END IF;
       END LOOP;
    END; 
    DECLARE
       v_counter BINARY_INTEGER := 0;
    BEGIN
       LOOP
          v_counter := v_counter+1;
          DBMS_OUTPUT.PUT_LINE('v_counter = '||v_counter);
          EXIT WHEN v_counter = 5;        -->> EXIT WHEN语句
       END LOOP;
    END;

    二、 WHILE循环

           WHILE循环的结构如下所示:

           WHILE CONDITION LOOP
                  STATEMENT 1;
                  STATEMNET 2;
                  ...
                  STATEMENT N;
            END LOOP;

            上例简单循环的例子可改写如下:

    DECLARE
       v_counter BINARY_INTEGER := 0;
    BEGIN
       WHILE v_counter < 5 LOOP
          v_counter := v_counter+1; 
          DBMS_OUTPUT.PUT_LINE('v_counter = '||v_counter);
       END LOOP;
    END;

           在WHILE循环体中,同样可以使用EXIT和EXIT WHEN语句以提前终止循环

    三、 整型值FOR循环

           其结构如下:

           FOR loop_counter IN [REVERSE] lower_limit..upper_limit LOOP
                 STATEMENT 1;
                 STATEMENT 2;
                 ...
                 STATEMENT N;
           END LOOP;

           变量loop_counter是隐含定义的索引变量。不需要在PL/SQL语句块的声明部分定义循环计数器。这个变量时循环结构定义的。lower_limit和upper_limit是两个整数数字或者在运行时计算结果为整数值的表达式,双点号(..)是范围操作符。如果使用IN REVERSE,则循环计数器会从upper_limit到lower_limit。

           上例简单循环的例子可改写如下:

    BEGIN
    FOR v_counter IN 1..5 LOOP
       DBMS_OUTPUT.PUT_LINE('v_counter = '||v_counter);
    END LOOP;
    END;

           上述讨论的EXIT和EXIT WHEN语句也可以在FOR循环的循环体中使用。

    四、 CONTINUE语句

           CONTINUE语句有两种形式:CONTINUE和CONTINUE WHEN

           CONTINUE语法如下:

           IF CONTINUE_CONDITION THEN
               CONTINUE;
           END IF;

           CONTINUE WHEN语法如下:

           CONTINUE WHEN CONTINUE_CONDITION;

           二者等效。

           举例如下,求1到10内偶数的乘积。

    DECLARE
      v_sum number := 1;
    BEGIN
      FOR i IN 1..10 LOOP
        IF MOD(i,2) != 0 THEN
          CONTINUE;
        END IF;
        v_sum := v_sum*i;
      END LOOP;
      DBMS_OUTPUT.PUT_LINE('The number is = '||v_sum);
    END;

    五、嵌套循环

         我们已经讨论过三种类型的循环:简单循环、WHILE循环以及FOR循环。任何一种循环都可以嵌套在其他循环中。

         试举一例:

    DECLARE
      v_counter1 INTEGER :=0;
      v_counter2 INTEGER;
    BEGIN
      WHILE v_counter1 < 3 LOOP
          DBMS_OUTPUT.PUT_LINE('v_counter1: '||v_counter1);
          v_counter2 := 0;
          LOOP
             DBMS_OUTPUT.PUT_LINE('v_counter2: '||v_counter2);
             v_counter2 := v_counter2+1;
             EXIT WHEN v_counter2 >= 2;
          END LOOP;
          v_counter1 := v_counter1+1;
      END LOOP;
    END;

     六、循环标签

           循环标签出现在循环的开始处,在循环语句的结尾处使用。在嵌套循环中,循环标签很有必要,因为这会大大提升代码的可读性。

           在某些场合,必须使用循环标签,如下例所示:     

    BEGIN
      <<outer>>
      FOR v_counter IN 1..3 LOOP
        <<inner>>
        FOR v_counter IN 1..2 LOOP
            DBMS_OUTPUT.PUT_LINE('outer.v_counter '||outer.v_counter);
            DBMS_OUTPUT.PUT_LINE('inner.v_counter '||inner.v_counter);
        END LOOP inner;
      END LOOP outer;
    END;

            在这里我们用了循环标签,因为内、外部循环都使用了相同的循环计数器v_counter。为了引用v_counter的内部直和外部值,就要使用循环标签。当然,循环标签的名称可任意取。

       

           

  • 相关阅读:
    git连接远程GitHub仓库详细总结 for HTTPS协议
    软工课程总结&小黄衫获奖感言
    Yum项目上线实战(网站运维)
    MySQL基础
    Shell基础
    Linux网络基础
    Linux的权限管理操作
    linux自有服务(2)
    Linux自有服务
    Linux基本指令
  • 原文地址:https://www.cnblogs.com/ivictor/p/3881107.html
Copyright © 2020-2023  润新知