Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 288|回复: 0

[默认分类] Oracle PL/SQL之LOOP循环控制语句

[复制链接]
  • TA的每日心情
    开心
    2021-12-13 21:45
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    发表于 2018-7-12 14:02:02 | 显示全部楼层 |阅读模式
        在PL/SQL中可以使用LOOP语句对数据进行循环处理,利用该语句可以循环执行指定的语句序列。常用的LOOP循环语句包含3种形式:基本的LOOP、WHILE...LOOP和FOR...LOOP。
        LOOP语句的基本语法结构如下:

    1. [<<label_name>>]
    2. LOOP
    3. statement...
    4. END LOOP [label_name]
    5. 【语法说明】
    6. <<label_name>>:LOOP结构的标签,是可选项。
    7. LOOP:LOOP循环开始标志。
    8. statement:LOOP语句中循环执行的语句序列。
    9. END LOOP:LOOP循环结束标志,可以添加LOOP结构的标签。
    复制代码

    1.基本的LOOP语句
        实例:要求声明变量,每次循环都需要为变量增加数字1,并输出结果。当变量值大于3时,退出循环操作。
        a、利用EXIT...WHEN结束循环操作。

    1. SQL> set serveroutput on;
    2. SQL> --exit when
    3. SQL> declare
    4.   2    v_rlt number(8):=-3;
    5.   3  begin
    6.   4     <<fst_loop>>
    7.   5     loop
    8.   6       dbms_output.put_line("v_rlt = "||v_rlt);
    9.   7       v_rlt:=v_rlt+1;
    10.   8       exit fst_loop when v_rlt > 3;
    11.   9     end loop;
    12. 10       dbms_output.put_line("LOOP循环已经结束!");
    13. 11  end;
    14. 12   /
    15. v_rlt = -3
    16. v_rlt = -2
    17. v_rlt = -1
    18. v_rlt = 0
    19. v_rlt = 1
    20. v_rlt = 2
    21. v_rlt = 3
    22. LOOP循环已经结束!
    23. PL/SQL procedure successfully completed
    复制代码

        b、利用IF...EXIT语句结束循环

    1. SQL> --if exit
    2. SQL> declare
    3.   2    v_rlt number(8):=-3;
    4.   3  begin
    5.   4     <<fst_loop>>
    6.   5     loop
    7.   6       dbms_output.put_line("v_rlt = "||v_rlt);
    8.   7       v_rlt:=v_rlt+1;
    9.   8       if v_rlt > 3 then
    10.   9        dbms_output.put_line("变量的值已经大于3,当前值为"||v_rlt);
    11. 10        exit fst_loop;
    12. 11       end if;
    13. 12     end loop fst_loop;
    14. 13       dbms_output.put_line("LOOP循环已经结束!");
    15. 14  end;
    16. 15  /
    17. v_rlt = -3
    18. v_rlt = -2
    19. v_rlt = -1
    20. v_rlt = 0
    21. v_rlt = 1
    22. v_rlt = 2
    23. v_rlt = 3
    24. 变量的值已经大于3,当前值为4
    25. LOOP循环已经结束!
    26. PL/SQL procedure successfully completed
    复制代码

    2、WHILE...LOOP结构
        WHILE...LOOP结构和基本的LOOP语句不同,它本身可以结束LOOP循环。WHILE关键词后面需要有布尔表达式,当WHILE后面的布尔表达式为TRUE时,则循环体重的语句序列被执行1次,然后会重新判断WHILE后面的表达式是否为TRUE,只有当WHILE后的布尔表达式为FALSE时,才结束整个LOOP循环。
        该语句结构的相关语法如下:

    1. [<<label_name>>]
    2. WHILE boolean_expression
    3. LOOP
    4. statement...
    5. END LOOP [label_name];
    6. 【语法说明】
    7. boolean_expression:布尔表达式。
    8. statement:语句序列,当boolean_expression为TRUE时,该语句序列可获得执行权。
    复制代码

        c、WHILE...LOOP结构

    1. SQL> --while...loop
    2. SQL> declare
    3.   2    v_rlt number(8):=-3;
    4.   3  begin
    5.   4     <<while_loop>>
    6.   5     while(v_rlt < 4)
    7.   6     loop
    8.   7       dbms_output.put_line("v_rlt = "||v_rlt);
    9.   8       v_rlt:=v_rlt+1;
    10.   9     end loop while_loop;
    11. 10       dbms_output.put_line("WHILE循环已经结束!");
    12. 11  end;
    13. 12  
    14. 13  /
    15. v_rlt = -3
    16. v_rlt = -2
    17. v_rlt = -1
    18. v_rlt = 0
    19. v_rlt = 1
    20. v_rlt = 2
    21. v_rlt = 3
    22. WHILE循环已经结束!
    23. PL/SQL procedure successfully completed
    复制代码

    3.FOR...LOOP结构
        FOR...LOOP语句可以遍历某个范围的整数,该范围被FOR和LOOP关键词封闭。首次进入循环时,循环范围将被确定,并且以后不会再次计算。每循环一次,循环指数将会自动增加1。
        FOR...LOOP语句的语法结构如下:

    1. [<<label_name>>]
    2. FOR index_name IN
    3. [ REVERSE ]
    4. lower_bound .. upper_bound
    5. LOOP
    6. statement...
    7. END LOOP [label_name];
    8. 【语法说明】
    9. index_name:循环计数器,是一个变量,它可以得到当前的循环指数。需要注意的是,不能为其手工赋值。
    10. REVERSE:可选项,指定循环方式。默认的循环方式由下标(lower_bound)到上标(upper_bound)。使用该选项则从上标界到下标界。
    11. lower_bound:循环范围的下标界。
    12. upper_bound:循环范围的上标界。
    13. 下标和上标之间的".."不能省略。
    复制代码

        d、FOR...LOOP结构

    1. SQL> --for..loop
    2. SQL> begin
    3.   2     for v_rlt in -3..3 loop
    4.   3       dbms_output.put_line("v_rlt = "||v_rlt);
    5.   4     end loop;
    6.   5       dbms_output.put_line("FOR循环已经结束!");
    7.   6  end;
    8.   7  /
    9. v_rlt = -3
    10. v_rlt = -2
    11. v_rlt = -1
    12. v_rlt = 0
    13. v_rlt = 1
    14. v_rlt = 2
    15. v_rlt = 3
    16. FOR循环已经结束!
    17. PL/SQL procedure successfully completed
    复制代码


    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-4-26 00:01 , Processed in 0.321227 second(s), 37 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表