设为首页 收藏本站
查看: 752|回复: 0

[经验分享] Oracle LOOP循环控制语句

[复制链接]

尚未签到

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

  
LOOP语句的基本语法结构如下:
  []
  

  LOOP
  statement...
  END LOOP [label_name]
  【语法说明】
  :LOOP结构的标签,是可选项。
  LOOP:LOOP循环开始标志。
  statement:LOOP语句中循环执行的语句序列。
  END LOOP:LOOP循环结束标志,可以添加LOOP结构的标签。
  1.基本的LOOP语句
  实例:要求声明变量,每次循环都需要为变量增加数字1,并输出结果。当变量值大于100时,退出循环操作。
  

a、利用EXIT...WHEN结束循环操作。  

  SQL> declare
  2    v_rlt number(3):=1;
  3  begin
  4   
  5    loop
  6      dbms_output.put_line('v_rlt = '||v_rlt);
  7      v_rlt:=v_rlt+1;
  8      exit fst_loop when v_rlt > 100;
  9    end loop;
  10      dbms_output.put_line('LOOP循环已经结束!');
  11  end;
  12  /
  v_rlt = 1
  v_rlt = 2
  v_rlt = 3
  v_rlt = 4
  v_rlt = 5
  v_rlt = 6
  v_rlt = 7
  v_rlt = 8
  v_rlt = 9
  v_rlt = 10
  v_rlt = 11
  v_rlt = 12
  v_rlt = 13
  v_rlt = 14
  v_rlt = 15
  v_rlt = 16
  v_rlt = 17
  v_rlt = 18
  v_rlt = 19
  v_rlt = 20
  v_rlt = 21
  v_rlt = 22
  v_rlt = 23
  v_rlt = 24
  v_rlt = 25
  v_rlt = 26
  v_rlt = 27
  v_rlt = 28
  v_rlt = 29
  v_rlt = 30
  v_rlt = 31
  v_rlt = 32
  v_rlt = 33
  v_rlt = 34
  v_rlt = 35
  v_rlt = 36
  v_rlt = 37
  v_rlt = 38
  v_rlt = 39
  v_rlt = 40
  v_rlt = 41
  v_rlt = 42
  v_rlt = 43
  v_rlt = 44
  v_rlt = 45
  v_rlt = 46
  v_rlt = 47
  v_rlt = 48
  v_rlt = 49
  v_rlt = 50
  v_rlt = 51
  v_rlt = 52
  v_rlt = 53
  v_rlt = 54
  v_rlt = 55
  v_rlt = 56
  v_rlt = 57
  v_rlt = 58
  v_rlt = 59
  v_rlt = 60
  v_rlt = 61
  v_rlt = 62
  v_rlt = 63
  v_rlt = 64
  v_rlt = 65
  v_rlt = 66
  v_rlt = 67
  v_rlt = 68
  v_rlt = 69
  v_rlt = 70
  v_rlt = 71
  v_rlt = 72
  v_rlt = 73
  v_rlt = 74
  v_rlt = 75
  v_rlt = 76
  v_rlt = 77
  v_rlt = 78
  v_rlt = 79
  v_rlt = 80
  v_rlt = 81
  v_rlt = 82
  v_rlt = 83
  v_rlt = 84
  v_rlt = 85
  v_rlt = 86
  v_rlt = 87
  v_rlt = 88
  v_rlt = 89
  v_rlt = 90
  v_rlt = 91
  v_rlt = 92
  v_rlt = 93
  v_rlt = 94
  v_rlt = 95
  v_rlt = 96
  v_rlt = 97
  v_rlt = 98
  v_rlt = 99
  v_rlt = 100
  LOOP循环已经结束!
  PL/SQL procedure successfully completed.
  b、利用IF...EXIT语句结束循环
  SQL> declare
  2    v_rlt number(3):=1;
  3  begin
  4   
  5    loop
  6      dbms_output.put_line('v_rlt = '||v_rlt);
  7      v_rlt:=v_rlt+1;
  8      if v_rlt > 100 then
  9        dbms_output.put_line('变量的值已经大于100,当前值为'||v_rlt);
  10        exit fst_loop;
  11      end if;
  12    end loop;
  13      dbms_output.put_line('LOOP循环已经结束!');
  14  end;
  15  /
  v_rlt = 1
  v_rlt = 2
  v_rlt = 3
  v_rlt = 4
  v_rlt = 5
  v_rlt = 6
  v_rlt = 7
  v_rlt = 8
  v_rlt = 9
  v_rlt = 10
  v_rlt = 11
  v_rlt = 12
  v_rlt = 13
  v_rlt = 14
  v_rlt = 15
  v_rlt = 16
  v_rlt = 17
  v_rlt = 18
  v_rlt = 19
  v_rlt = 20
  v_rlt = 21
  v_rlt = 22
  v_rlt = 23
  v_rlt = 24
  v_rlt = 25
  v_rlt = 26
  v_rlt = 27
  v_rlt = 28
  v_rlt = 29
  v_rlt = 30
  v_rlt = 31
  v_rlt = 32
  v_rlt = 33
  v_rlt = 34
  v_rlt = 35
  v_rlt = 36
  v_rlt = 37
  v_rlt = 38
  v_rlt = 39
  v_rlt = 40
  v_rlt = 41
  v_rlt = 42
  v_rlt = 43
  v_rlt = 44
  v_rlt = 45
  v_rlt = 46
  v_rlt = 47
  v_rlt = 48
  v_rlt = 49
  v_rlt = 50
  v_rlt = 51
  v_rlt = 52
  v_rlt = 53
  v_rlt = 54
  v_rlt = 55
  v_rlt = 56
  v_rlt = 57
  v_rlt = 58
  v_rlt = 59
  v_rlt = 60
  v_rlt = 61
  v_rlt = 62
  v_rlt = 63
  v_rlt = 64
  v_rlt = 65
  v_rlt = 66
  v_rlt = 67
  v_rlt = 68
  v_rlt = 69
  v_rlt = 70
  v_rlt = 71
  v_rlt = 72
  v_rlt = 73
  v_rlt = 74
  v_rlt = 75
  v_rlt = 76
  v_rlt = 77
  v_rlt = 78
  v_rlt = 79
  v_rlt = 80
  v_rlt = 81
  v_rlt = 82
  v_rlt = 83
  v_rlt = 84
  v_rlt = 85
  v_rlt = 86
  v_rlt = 87
  v_rlt = 88
  v_rlt = 89
  v_rlt = 90
  v_rlt = 91
  v_rlt = 92
  v_rlt = 93
  v_rlt = 94
  v_rlt = 95
  v_rlt = 96
  v_rlt = 97
  v_rlt = 98
  v_rlt = 99
  v_rlt = 100
  变量的值已经大于100,当前值为101
  LOOP循环已经结束!
  PL/SQL procedure successfully completed.
  2、WHILE...LOOP结构
  WHILE...LOOP结构和基本的LOOP语句不同,它本身可以结束LOOP循环。WHILE关键词后面需要有布尔表达式,当WHILE后面的布尔表达式为TRUE时,则循环体重的语句序列被执行1次,然后会重新判断WHILE后面的表达式是否为TRUE,只有当WHILE后的布尔表达式为FALSE时,才结束整个LOOP循环。
  

该语句结构的相关语法如下:  []
  

  WHILE boolean_expression
  LOOP
  statement...
  END LOOP [label_name];
  【语法说明】
  boolean_expression:布尔表达式。
  statement:语句序列,当boolean_expression为TRUE时,该语句序列可获得执行权。
  SQL> declare
  2    v_rlt number(3):=1;
  3  begin
  4   
  5    while( v_rlt < 100)
  6      loop
  7        dbms_output.put_line('v_rlt = '||v_rlt);
  8        v_rlt:=v_rlt+1;
  9     end loop;
  10      dbms_output.put_line('while循环已经结束!');
  11  end;
  12  /
  v_rlt = 1
  v_rlt = 2
  v_rlt = 3
  v_rlt = 4
  v_rlt = 5
  v_rlt = 6
  v_rlt = 7
  v_rlt = 8
  v_rlt = 9
  v_rlt = 10
  v_rlt = 11
  v_rlt = 12
  v_rlt = 13
  v_rlt = 14
  v_rlt = 15
  v_rlt = 16
  v_rlt = 17
  v_rlt = 18
  v_rlt = 19
  v_rlt = 20
  v_rlt = 21
  v_rlt = 22
  v_rlt = 23
  v_rlt = 24
  v_rlt = 25
  v_rlt = 26
  v_rlt = 27
  v_rlt = 28
  v_rlt = 29
  v_rlt = 30
  v_rlt = 31
  v_rlt = 32
  v_rlt = 33
  v_rlt = 34
  v_rlt = 35
  v_rlt = 36
  v_rlt = 37
  v_rlt = 38
  v_rlt = 39
  v_rlt = 40
  v_rlt = 41
  v_rlt = 42
  v_rlt = 43
  v_rlt = 44
  v_rlt = 45
  v_rlt = 46
  v_rlt = 47
  v_rlt = 48
  v_rlt = 49
  v_rlt = 50
  v_rlt = 51
  v_rlt = 52
  v_rlt = 53
  v_rlt = 54
  v_rlt = 55
  v_rlt = 56
  v_rlt = 57
  v_rlt = 58
  v_rlt = 59
  v_rlt = 60
  v_rlt = 61
  v_rlt = 62
  v_rlt = 63
  v_rlt = 64
  v_rlt = 65
  v_rlt = 66
  v_rlt = 67
  v_rlt = 68
  v_rlt = 69
  v_rlt = 70
  v_rlt = 71
  v_rlt = 72
  v_rlt = 73
  v_rlt = 74
  v_rlt = 75
  v_rlt = 76
  v_rlt = 77
  v_rlt = 78
  v_rlt = 79
  v_rlt = 80
  v_rlt = 81
  v_rlt = 82
  v_rlt = 83
  v_rlt = 84
  v_rlt = 85
  v_rlt = 86
  v_rlt = 87
  v_rlt = 88
  v_rlt = 89
  v_rlt = 90
  v_rlt = 91
  v_rlt = 92
  v_rlt = 93
  v_rlt = 94
  v_rlt = 95
  v_rlt = 96
  v_rlt = 97
  v_rlt = 98
  v_rlt = 99
  while循环已经结束!
  PL/SQL procedure successfully completed.
  3.FOR...LOOP结构
  FOR...LOOP语句可以遍历某个范围的整数,该范围被FOR和LOOP关键词封闭。首次进入循环时,循环范围将被确定,并且以后不会再次计算。每循环一次,循环指数将会自动增加1。
  

FOR...LOOP语句的语法结构如下  []
  

  FOR index_name IN
  [ REVERSE ]
  lower_bound .. upper_bound
  LOOP
  statement...
  END LOOP [label_name];
  【语法说明】
  index_name:循环计数器,是一个变量,它可以得到当前的循环指数。需要注意的是,不能为其手工赋值。
  REVERSE:可选项,指定循环方式。默认的循环方式由下标(lower_bound)到上标(upper_bound)。使用该选项则从上标界到下标界。
  lower_bound:循环范围的下标界。
  upper_bound:循环范围的上标界。
  下标和上标之间的&quot;..&quot;不能省略。
  SQL> declare
  2    v_rlt number(3):=1;
  3  begin
  4    for v_rlt in 1..100 loop
  5      dbms_output.put_line('v_rlt = '||v_rlt);
  6    end loop;
  7      dbms_output.put_line('for循环已经结束!');
  8  end;
  9  /
  v_rlt = 1
  v_rlt = 2
  v_rlt = 3
  v_rlt = 4
  v_rlt = 5
  v_rlt = 6
  v_rlt = 7
  v_rlt = 8
  v_rlt = 9
  v_rlt = 10
  v_rlt = 11
  v_rlt = 12
  v_rlt = 13
  v_rlt = 14
  v_rlt = 15
  v_rlt = 16
  v_rlt = 17
  v_rlt = 18
  v_rlt = 19
  v_rlt = 20
  v_rlt = 21
  v_rlt = 22
  v_rlt = 23
  v_rlt = 24
  v_rlt = 25
  v_rlt = 26
  v_rlt = 27
  v_rlt = 28
  v_rlt = 29
  v_rlt = 30
  v_rlt = 31
  v_rlt = 32
  v_rlt = 33
  v_rlt = 34
  v_rlt = 35
  v_rlt = 36
  v_rlt = 37
  v_rlt = 38
  v_rlt = 39
  v_rlt = 40
  v_rlt = 41
  v_rlt = 42
  v_rlt = 43
  v_rlt = 44
  v_rlt = 45
  v_rlt = 46
  v_rlt = 47
  v_rlt = 48
  v_rlt = 49
  v_rlt = 50
  v_rlt = 51
  v_rlt = 52
  v_rlt = 53
  v_rlt = 54
  v_rlt = 55
  v_rlt = 56
  v_rlt = 57
  v_rlt = 58
  v_rlt = 59
  v_rlt = 60
  v_rlt = 61
  v_rlt = 62
  v_rlt = 63
  v_rlt = 64
  v_rlt = 65
  v_rlt = 66
  v_rlt = 67
  v_rlt = 68
  v_rlt = 69
  v_rlt = 70
  v_rlt = 71
  v_rlt = 72
  v_rlt = 73
  v_rlt = 74
  v_rlt = 75
  v_rlt = 76
  v_rlt = 77
  v_rlt = 78
  v_rlt = 79
  v_rlt = 80
  v_rlt = 81
  v_rlt = 82
  v_rlt = 83
  v_rlt = 84
  v_rlt = 85
  v_rlt = 86
  v_rlt = 87
  v_rlt = 88
  v_rlt = 89
  v_rlt = 90
  v_rlt = 91
  v_rlt = 92
  v_rlt = 93
  v_rlt = 94
  v_rlt = 95
  v_rlt = 96
  v_rlt = 97
  v_rlt = 98
  v_rlt = 99
  v_rlt = 100
  for循环已经结束!
  PL/SQL procedure successfully completed.



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-563720-1-1.html 上篇帖子: Oracle的参数文件pfile和spfile 下篇帖子: Oracle专题12之游标
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

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