Oracle PL/SQL LOOP 示例
什么是循环?
循环允许程序中的某一部分代码被执行所需的次数。
在本教程中,我们将了解 PL/SQL 中的循环概念以及循环中的控制流。
循环概念简介
循环概念在编码中提供了以下优势。
- 代码可重用性
- 减少代码量
- 易于控制流程
- 降低复杂性
下图以图解方式展示了循环概念
在上图中,将检查循环条件,只要循环条件满足,执行块就会被执行。
在每次迭代中,实际决定循环条件的循环计数器变量应进行修改,以使控制退出循环。在某些情况下,此循环计数器变量是用于预定义计数的增量/减量运算符,而在某些情况下,它是用于继续执行块直到满足条件的搜索条件。
循环控制语句
在学习循环概念之前,必须学习循环控制语句。循环控制语句是实际控制循环内执行流程的语句。下面是关于循环控制语句的详细描述。
CONTINUE
此关键字向 PL/SQL 引擎发送指令,当 PL/SQL 引擎在循环中遇到此关键字时,它将跳过执行代码块中剩余的代码,并立即开始下一次迭代。这主要用于当循环内的代码希望跳过某些迭代值时。
EXIT / EXIT WHEN
此关键字向 PL/SQL 引擎发送指令,当 PL/SQL 引擎遇到此关键字时,它将立即退出当前循环。如果 PL/SQL 引擎在嵌套循环中遇到 EXIT,它将退出定义它的循环,即在嵌套循环中,在内层循环中给出 EXIT 只会从内层循环退出控制,而不会从外层循环退出。“EXIT WHEN”后跟一个给出布尔结果的表达式。如果结果为 TRUE,则控制将退出。
GOTO
此语句将控制转移到带标签的语句(“GOTO
- 控制转移只能在子程序内进行。
- 控制转移不能从异常处理部分到执行部分。
除非别无选择,否则不建议使用此语句,因为由于控制从一个部分转移到另一个部分,代码控制的可追溯性在程序中会非常困难。
PL/SQL 中的循环类型
PL/SQL 提供以下三种循环
- 基本循环语句
- For 循环语句
- While 循环语句
基本循环语句
此循环语句是 PL/SQL 中最简单的循环结构。执行块以关键字“LOOP”开始,以关键字“END LOOP”结束。
退出条件应在执行块内给出,以便控制退出循环。
它需要显式地在执行部分给出 EXIT 关键字以退出循环。
LOOP <execution block starts> <EXIT condition based on developer criteria> <execution_block_ends> END LOOP;
语法说明
- 在上面的语法中,关键字“LOOP”标记循环的开始,“END LOOP”标记循环的结束。
- 执行块包含所有需要执行的代码,包括 EXIT 条件。
- 执行部分可以包含任何执行语句。
注意:没有 EXIT 关键字的基本循环语句将是无限循环,永不停止。
示例 1:在此示例中,我们将使用基本循环语句打印从 1 到 5 的数字。为此,我们将执行以下代码。
DECLARE a NUMBER:=1; BEGIN dbms_output.put_line('Program started.'); LOOP dbms_output.put_line(a); a:=a+1; EXIT WHEN a>5; END LOOP; dbms_output.put_line('Program completed'); END: /
代码解释
- 代码行 2:将变量“a”声明为“NUMBER”数据类型,并将其初始化为值“1”。
- 代码行 4:打印语句“程序已开始”。
- 代码行 5:关键字“LOOP”标记循环的开始。
- 代码行 6:打印变量“a”的值。
- 代码行 7:将变量“a”的值加 1。
- 代码行 8:检查变量“a”的值是否大于 5。
- 代码行 9:关键字“END LOOP”标记执行块的结束。
- 从第 6 行到第 8 行的代码将继续执行,直到“a”达到 6,因为条件将返回 TRUE,控制将退出循环。
- 代码行 10:打印语句“程序已完成”。
循环标签
在 PL/SQL 中,循环可以被标记。标签应包含在“<<”和“>>”之间。循环的标记,尤其是在嵌套循环代码中,将提供更好的可读性。标签可以用于 EXIT 命令以退出该特定循环。使用标签,可以通过在 EXIT 命令后跟外部循环标签,将控制直接退出嵌套循环的外部循环,从循环内的任何位置。
<<OUTER_LOOP>> LOOP <execution_block_starts> . <<INNER_LOOP>> LOOP --inner <execution_part> END LOOP; . <executi_block_ends> END LOOP;
语法说明
- 在上面的语法中,外部循环中有一个内部循环。
- “<
>”和“< >”是这些循环的标签。
示例 1:在此示例中,我们将使用基本循环语句打印从 1 开始的数字。每个数字将被打印为其值的次数。系列的上限固定在程序声明部分。让我们学习如何使用标签概念来实现这一点。为此,我们将执行以下代码。
DECLARE a NUMBER:=0; b NUMBER; upper-limit NUMBER :=4; BEGIN dbms_output.put_line(‘Program started.' ); «outerloop» LOOP a:=a+1; b:=l; «inner loop» LOOP EXIT outer_loop WHEN a > upper_limit; dbms_output.put_line(a); b:=b+l; EXIT inner_loop WHEN b>a; END LOOP; END LOOP; dbms_output.put_line('Program completed.'); END; /
代码解释
- 代码行 2-3:将变量“a”和“b”声明为“NUMBER”数据类型。
- 代码行 4:将变量“upper_limit”声明为“NUMBER”数据类型,值为“4”。
- 代码行 6:打印语句“程序已开始”。
- 代码行 7:外部循环被标记为“outer_loop”。
- 代码行 9:将变量“a”的值加 1。
- 代码行 11:内部循环被标记为“inner_loop”。
- 代码行 13:EXIT 条件,检查变量“a”的值是否大于“upper_limit”值。如果不是,它将继续执行,否则它将直接退出外部循环。
- 代码行 14:打印变量“b”的值。
- 代码行 15:将变量“b”的值加 1。
- 代码行 16:EXIT 条件,检查变量“b”的值是否大于“a”。如果是,则控制将从内部循环退出。
- 代码行 14:打印语句“程序已完成”。
摘要
循环 | 基本循环 |
退出条件 | 当在执行部分遇到关键字“EXIT”时退出。 |
用途 | 当退出不基于任何特定条件时,使用此方法效果很好。 |