【DB.PL/SQL】程序流程控制 —— 循环 ——LOOP, END LOOP, WHILE, FOR, CONTINUE

本文深入探讨PL/SQL中的循环结构,包括简单循环、WHILE循环、数型FOR循环和游标FOR循环的语法与用法。同时介绍了CONTINUE语句的使用,以及循环中的退出机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

PL/SQL循环结构

由两部分组成:循环边界和循环体:例如:



简单循环LOOP,END LOOP

语法如下:

LOOP
    executable statements
END LOOP;


终止简单循环 —— EXIT, EXIT WHEN

可以把EXIT或者EXIT WHEN语句放入循环体内,否则循环会无限;语法为:

EXIT;
EXIT WHEN condition;

condition是一个布尔表达式。


WHIEL循环

语法如下:

WHILE condition
  LOOP
      executable statements
END LOOP;

condition是一个布尔表达式,如果为TRUE,执行循环;为FALSE或NULL,循环终止。


数值型FOR循环

语法格式为:

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循环

游标型的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;


CONTINUE语句

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;
/










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值