• Oracle循环语句


    Oracle循环语句

    编写循环控制结构时,用户可以使用基本循环,WHILE循环和FOR循环等三种类型的循环语句,下面分别介绍使用这三种循环语句的方法。

    1.基本循环

    LOOP

             statement1;

             ......

              EXIT [WHEN condition];

    END LOOP;

    当使用基本循环时,无论是否满足条件,语句至少会被执行一次,当condition为TRUE时,会退出循环,并执行END LOOP后的相应操作。当编写基本循环时一定要包含EXIT语句,否则会陷入死循环。另外还应该定义循环控制变量,并且在循环体内修改循环控制变量的值。示例:

    SQL> declare
      2  i int:=1;
      3  begin
      4  loop
      5  insert into testloop values(i);
      6  exit when i=10;
      7  i:=i+1;
      8  end loop;
      9  end;
    10  /

    2.WHILE循环

    基本循环至少要执行一次循环体内的语句,而对于WHILE循环来说,只有条件为TRUE时,才会执行循环体内的语句。WHILE循环以WHILE ...LOOP开始,以END LOOP结束。

    WHILE condition LOOP

               statement1;

               statement2;

               .....

    END LOOP;

    当condition为TRUE时,执行循环体内的语句,而当condition为FALSE或NULL时,会退出循环,并执行END LOOP后的语句。当使用WHILE循环时,应该定义循环控制变量,并在循环体内改变循环控制变量的值。示例:

    SQL> declare
      2  i int:=1;
      3  begin
      4  while i<=10 loop
      5  insert into testloop values(i);
      6  i:=i+1;
      7  end loop;
      8  end;
      9  /

    3.FOR循环

    当使用基本循环或WHILE循环时,需要定义循环控制变量,并且循环控制变量不仅可以使用NUMBER类型,也可以使用其他数据类型。当使用FOR循环时,ORACLE会隐含定义循环控制变量。

    FOR counter in [REVERSE] lower_bound. .upper_bound LOOP

             statement1;

             statement2;

             .......

    END LOOP;

    counter是循环控制变量,并且该变量由oracle隐含定义,不需要显式定义。lower_bound和upper_bound分别对应于循环控制变量的下界值和上界值,默认情况下,当使用FOR循环时,每次循环时循环控制变量会自动增1.如果指定REVERSE选项,那么每次循环时循环控制变量会自动减1。示例:

    SQL> begin
      2  for i in reverse 1..10 loop
      3  insert into testloop values(i);
      4  end loop;
      5  end;

    4.嵌套循环和标号

    嵌套循环是指在一个循环语句之中嵌入另一个循环语句,而标号(label)则用于标记嵌套块或嵌套循环,通过在嵌套循环中使用标号,可以区分内层循环和外层循环,并且可以在内层循环中直接退出外层循环,在编写时可以用<<label_name>>定义标号。示例:

    SQL> declare
      2  result int;
      3  begin
      4  <<outer>>
      5  for i in 1..100 loop
      6  <<inter>>
      7  for j in 1..100 loop
      8  result:=i*j;
      9  exit outer when result=1000;
    10  exit when result=500;
    11  end loop inter;
    12  dbms_output.put_line(result);
    13  end loop outer;
    14  dbms_output.put_line(result);
    15  end;
    16  /

    当执行以上PL/SQL块时,如果result=1000,那么直接退出外层循环,而result=500时只会退出内层循环。


    By Peter.zhang

    From:Peter's Blog                            

    MSN: peter.zhang@live.cn

    电子邮箱:peter.zhang@foxmail.com

  • 相关阅读:
    转Oracle、MySql、SQLServer 数据分页查询
    转 DevExpress-ASPxPageControl 动态添加 TabPage 内容
    淘淘实惠多www.taohuiduo.com-专注独家折扣、1折特卖、9块9包邮、全场包邮
    "命名空间"system.web"中不存在类型或命名空间名称security"错误解决方法
    转摘 Eclipse智能提示及快捷键
    转(C#)Winform中MD5加密
    ComboBoxEdit数据绑定
    格式化日期和时间
    时间格式转换
    如何安装ESXi的补丁
  • 原文地址:https://www.cnblogs.com/bkhacker/p/5246242.html
Copyright © 2020-2023  润新知