阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Oracle PL/SQL loop循环详解

128次阅读
没有评论

共计 2707 个字符,预计需要花费 7 分钟才能阅读完成。

在 PL/SQL 中可以使用 LOOP 语句对数据进行循环处理,利用该语句可以循环执行指定的语句序列。常用的 LOOP 循环语句包含 3 种形式:基本的 LOOP、WHILE…LOOP 和 FOR…LOOP。

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

[<<label_name>>]
LOOP
 statement…
END LOOP [label_name]

【语法说明】
<<label_name>>:LOOP 结构的标签,是可选项。
LOOP:LOOP 循环开始标志。
statement:LOOP 语句中循环执行的语句序列。
END LOOP:LOOP 循环结束标志,可以添加 LOOP 结构的标签。

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

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

SQL> set serveroutput on;
SQL> –exit when
SQL> declare
  2    v_rlt number(8):=-3;
  3  begin
  4    <<fst_loop>>
  5    loop
  6      dbms_output.put_line(‘v_rlt = ‘||v_rlt);
  7      v_rlt:=v_rlt+1;
  8      exit fst_loop when v_rlt > 3;
  9    end loop;
 10      dbms_output.put_line(‘LOOP 循环已经结束!’);
 11  end;
 12  /
 
v_rlt = -3
v_rlt = -2
v_rlt = -1
v_rlt = 0
v_rlt = 1
v_rlt = 2
v_rlt = 3
LOOP 循环已经结束!
 
PL/SQL procedure successfully completed

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

SQL> –if exit
SQL> declare
  2    v_rlt number(8):=-3;
  3  begin
  4    <<fst_loop>>
  5    loop
  6      dbms_output.put_line(‘v_rlt = ‘||v_rlt);
  7      v_rlt:=v_rlt+1;
  8      if v_rlt > 3 then
  9        dbms_output.put_line(‘ 变量的值已经大于 3,当前值为 ’||v_rlt);
 10        exit fst_loop;
 11      end if;
 12    end loop fst_loop;
 13      dbms_output.put_line(‘LOOP 循环已经结束!’);
 14  end;
 15  /
 
v_rlt = -3
v_rlt = -2
v_rlt = -1
v_rlt = 0
v_rlt = 1
v_rlt = 2
v_rlt = 3
变量的值已经大于 3,当前值为 4
LOOP 循环已经结束!
 
PL/SQL procedure successfully completed

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

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

[<<label_name>>]WHILE boolean_expression
LOOP
statement…
END LOOP [label_name];
【语法说明】
boolean_expression:布尔表达式。
statement:语句序列,当 boolean_expression 为 TRUE 时,该语句序列可获得执行权。

c、WHILE…LOOP 结构

SQL> –while…loop
SQL> declare
  2    v_rlt number(8):=-3;
  3  begin
  4    <<while_loop>>
  5    while(v_rlt < 4)
  6    loop
  7      dbms_output.put_line(‘v_rlt = ‘||v_rlt);
  8      v_rlt:=v_rlt+1;
  9    end loop while_loop;
 10      dbms_output.put_line(‘WHILE 循环已经结束!’);
 11  end;
 12 
 13  /
 
v_rlt = -3
v_rlt = -2
v_rlt = -1
v_rlt = 0
v_rlt = 1
v_rlt = 2
v_rlt = 3
WHILE 循环已经结束!
 
PL/SQL procedure successfully completed

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

    FOR…LOOP 语句的语法结构如下:

[<<label_name>>]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:循环范围的上标界。
下标和上标之间的 ”..” 不能省略。

 d、FOR…LOOP 结构

SQL> –for..loop
SQL> begin
  2    for v_rlt in -3..3 loop
  3      dbms_output.put_line(‘v_rlt = ‘||v_rlt);
  4    end loop;
  5      dbms_output.put_line(‘FOR 循环已经结束!’);
  6  end;
  7  /
 
v_rlt = -3
v_rlt = -2
v_rlt = -1
v_rlt = 0
v_rlt = 1
v_rlt = 2
v_rlt = 3
FOR 循环已经结束!
 
PL/SQL procedure successfully completed

更多 Oracle 相关信息见Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-09/147150.htm

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-22发表,共计2707字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中