Oracle PL/SQL 循环示例
什么是循环?
循环允许程序中的特定部分代码执行所需的次数。
在本教程中,我们将了解 PL/SQL 中的循环概念和循环中的控制流。
循环概念简介
循环概念在编码中提供了以下优势。
- 代码的可重用性
- 减少代码大小
- 轻松控制流程
- 降低复杂性
下图以图形方式展示了循环概念
在上图中,会检查循环条件,只要满足循环条件,就会执行执行块。
在每次迭代中,实际决定循环条件的循环计数器变量应该进行修改,以使控制退出循环。在某些情况下,此循环计数器变量是预定义计数的递增/递减运算符,在某些情况下,它是一个搜索条件,它会继续执行该块,直到满足条件为止。
循环控制语句
在学习循环概念之前,必须先学习循环控制语句。循环控制语句实际上控制循环内的执行流程。下面是有关循环控制语句的详细描述。
CONTINUE
此关键字向 PL/SQL 引擎发送一条指令,每当 PL/SQL 引擎在循环内遇到此关键字时,它将跳过代码执行块中的剩余代码,并立即开始下一次迭代。这主要用于当循环内的代码想要跳过某些迭代值时。
退出/退出时间
此关键字向 PL/SQL 引擎发送一条指令,即只要 PL/SQL 引擎遇到此关键字,它就会立即退出当前循环。如果 PL/SQL 引擎在嵌套循环中遇到 EXIT,则它将退出已定义的循环,即在嵌套循环中,在内循环中给出 EXIT 将仅退出内循环的控件,而不会退出外循环。'EXIT WHEN' 后跟一个给出布尔结果的表达式。如果结果为 TRUE,则控件将 EXIT。
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 命令中给出标签以退出该特定循环。使用标签,可以通过给出退出命令后跟外循环标签,让控件从循环内部的任何地方直接退出嵌套循环的外循环。
<<OUTER_LOOP>> LOOP <execution_block_starts> . <<INNER_LOOP>> LOOP --inner <execution_part> END LOOP; . <executi_block_ends> END LOOP;
语法解释:
- 在上面的语法中,外循环内部还有一个循环。
- '< >' 和 '< >' 是这些循环的标签。
例子1:在此示例中,我们将使用 Basic 循环语句从 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' 时退出 |
用法 | 当退出不基于任何特定条件时适用。 |