转载:Oracle PL/SQL之LOOP循环控制语句

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

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

 

[<<label_name>>]LOOP statement...END LOOP [label_name] 【语法说明】<<label_name>>LOOP结构的标签,是可选项。LOOPLOOP循环开始标志。statementLOOP语句中循环执行的语句序列。END LOOPLOOP循环结束标志,可以添加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 = -3v_rlt = -2v_rlt = -1v_rlt = 0v_rlt = 1v_rlt = 2v_rlt = 3LOOP循环已经结束! 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 = -3v_rlt = -2v_rlt = -1v_rlt = 0v_rlt = 1v_rlt = 2v_rlt = 3变量的值已经大于3,当前值为4LOOP循环已经结束! PL/SQL procedure successfully completed

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

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

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

    cWHILE...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 = -3v_rlt = -2v_rlt = -1v_rlt = 0v_rlt = 1v_rlt = 2v_rlt = 3WHILE循环已经结束! PL/SQL procedure successfully completed

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

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

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

    dFOR...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 = -3v_rlt = -2v_rlt = -1v_rlt = 0v_rlt = 1v_rlt = 2v_rlt = 3FOR循环已经结束! PL/SQL procedure successfully completed

 

<!--EndFragment-->

猜你喜欢

转载自susteven.iteye.com/blog/2181835