【DB.PL/SQL】程序流程控制 —— 循环 ——LOOP, END LOOP, WHILE, FOR, CONTINUE
由两部分组成:循环边界和循环体:例如:
语法如下:
LOOP executable statements END LOOP;
终止简单循环 —— EXIT, EXIT WHEN
可以把EXIT或者EXIT WHEN语句放入循环体内,否则循环会无限;语法为:
EXIT; EXIT WHEN condition;
condition是一个布尔表达式。
语法如下:
WHILE condition LOOP executable statements END LOOP;
condition是一个布尔表达式,如果为TRUE,执行循环;为FALSE或NULL,循环终止。
语法格式为:
FOR loop_index IN [REVERSE] lowest_number .. highest_number LOOP executable statements END LOOP;
- 不要声明循环索引变量loop_index,PL/SQL会自动隐式的用一个INTEGER类型的局部变量作为循环索引,作用域仅限循环之内
- 循环范围使用的表达式(lowest_number,highest_number)只会在循环开始时被求值依次。如果在循环体内改变了范围表达式使用的变量,对于范围边界没有任何作用
- 使用 REVERSE 关键字可以使循环从上边界到下边界递减式进行
- 递进的步长为 1;不能指定其他步长
示例:
FOR loop_counter IN 1 .. 10 LOOP ...可执行语句... END LOOP;
游标型的FOR循环式和一个显示游标或者直接放在循环边界中的SELECT语句关联在一起的循环。
如果需要去除游标的每条记录依次处理,就可以使用游标FOR循环,这也是游标的主要用法。
语法格式为:
FOR record IN {cursor_name | explicit SELECT statement} LOOP executable statements END LOOP;
- record是一个记录,是PL/SQL根据cursor_name这个游标的%ROWTYPE属性隐式的声明出来的
- 当游标中的所有记录都被取出后,游标型FOR循环就会终止。也可以使用EXIT语句来终止循环,但不推荐这么做
- 每次循环体执行后,PL/SQL会执行一个取数据操作,如果游标的%NOTFOUND属性等于TRUE,循环结束。如果游标中一行记录也没有,循环体也会结束
- 当要依次取出一个游标中的每一行记录并处理时,就使用游标型FOR循环
- 使用游标型FOR循环,可以省去操作游标时的OPEN, FETCH, CLOSE语句,也没有了%NOTFOUND属性的检查
使用示例:
DECLARE CURSOR occupancy_cur IS SELECT pet_i d , room_number FROM occupancy WHERE occupied_dt = TRUNC (SYSDATE); BEGIN FOR occupancy_rec 1N occupancy_cur LOOP update_bill (occupancy_rec.pet _id , occupancy_rec.room_number); END LOOP; END;
Oracle11g提供了一个新特性 —— continue语句。
两种形式:无条件的CONTUNUE和有条件的CONTINUE WHEN。
还可以通过CONTINUE结束内层循环,紧接着继续外层循环的下一次迭代,需要使用标签给循环命名:
BEGIN <<outer>> FOR outer index 1N 1 .. 5 LOOP ... executable statement... <<inner>> FOR inner index 1N 1 .. 5 LOOP ... executable statement... CONTINUE outer; END LOOP inner; END LOOP outer; END; /
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
- 上一篇:没有了
- 下一篇: 【Java.Web】Session —— Session Listener监听器