While 循环 Oracle PL/SQL 示例

⚡ 智能摘要

Oracle PL/SQL WHILE 循环会在条件为真时重复执行一段代码。它是一个入口检查循环,每次迭代前都会检查退出条件,因此代码块可能执行零次,并且不需要显式的 EXIT 关键字。

  • 🔁 目的: WHILE 循环在条件为真时运行,并在条件为假时立即停止。
  • 🚦 入境检查: 该条件在代码块之前进行测试,因此循环可以运行零次。
  • 🧮 无需出口: 每次迭代都会隐式验证该条件,因此不需要显式执行 EXIT 语句。
  • 🔢 柜台: 代码块内的某个变量必须发生变化,才能使条件最终变为假。
  • ♾️ 无限风险: 如果计数器永远不会满足条件,循环就会永远运行下去。
  • 反对: 当迭代次数未知时使用 WHILE,当迭代次数固定时使用 FOR。
  • 🚪 提前离场: EXIT WHEN 仍然可以在条件变为 false 之前退出 WHILE 循环。

Oracle PL/SQL While 循环

什么是PL/SQL While循环?

While循环 在 PL/SQL 中,循环语句的工作方式与基本循环语句类似,区别在于其退出条件位于循环的开头。它类似于入口检查循环,只有当条件满足时,执行块才会运行,因为在执行之前会先检查退出条件。

它不需要显式地使用“EXIT”关键字来退出循环,因为它每次都会隐式地验证条件。

PL/SQL While 循环语法

WHILE <EXIT condition>
LOOP
<execution block starts>
.
.
.
<execution_block_ends>
END LOOP;
  • 关键字“WHILE”表示循环的开始,“END LOOP”表示循环的结束。
  • 每次执行部分开始执行之前,都会对退出条件进行评估。
  • 执行块包含所有需要运行的代码。
  • 执行部分可以包含任何可执行语句。

示例 Oracle PL/SQL While 循环

在这个例子中,我们使用 WHILE 循环语句打印 1 到 5 之间的数字。

PL/SQL While 循环示例
PL/SQL While 循环示例
DECLARE
a NUMBER := 1;
BEGIN
dbms_output.put_line('Program started');
WHILE (a <= 5)
LOOP
dbms_output.put_line(a);
a:= a+1;
END LOOP;
dbms_output.put_line('Program completed');
END;
/

Code 说明:

  • Code 第2行: 声明变量“a”为“NUMBER”类型,并将其初始化为值“1”。
  • Code 第4行: 打印语句“程序已启动”。
  • Code 第5行: 关键字“WHILE”标记循环的开始,并检查“a”的值是否小于或等于5。
  • Code 第7行: 打印“a”的值。
  • Code 第8行: 将'a'的值加1。
  • Code 第9行: 关键字“END LOOP”标志着执行块的结束。
  • 第 7 行和第 8 行继续执行,直到 'a' 的值达到 6,此时条件返回 FALSE,控制流退出。 循环.
  • Code 第10行: 打印“程序完成”的声明。

WHILE 循环、FOR 循环和基本循环

PL/SQL 提供了三种循环类型,选择合适的循环类型可以保持代码清晰。WHILE 循环适用于条件驱动的重复执行,而其他两种循环则适用于固定计数或显式控制的退出。

循环 退出标准 最佳使用时机
WHILE 循环 顶部条件变为假 迭代次数未知。
FOR循环 计数器到达范围末端 迭代次数已知
基本循环 在代码块中显式地使用 EXIT 语句 出口由人工控制。

由于 WHILE 循环在顶部检查其条件,如果条件从一开始就为假,则循环体可能执行零次。这与基本循环的主要区别在于,基本循环的循环体始终至少执行一次。

避免无限循环

WHILE 循环完全依赖于控制变量向退出条件移动。如果它始终不向退出条件移动,循环就会无限运行,导致会话挂起。以下三个习惯可以避免这种情况:

  • 每次迭代都改变计数器。 示例中,循环内部递增了“a”的值;删除该行代码会导致无限循环。
  • 测试边界。 确认该条件对于初始值实际上可能变为假,而不仅仅是对于理想情况。
  • 添加安全出口。 对于数据驱动循环,当达到最大迭代次数时,使用 EXIT WHEN 可以防止出现意外值。

当重复次数确实固定时,FOR 循环可以完全消除风险,因为它的计数器是自动管理的。

常见问题

是的。因为条件检查是在代码块执行之前进行的,如果条件一开始就为假,那么代码块主体就不会执行。这种入口检查是它与基本循环的主要区别,基本循环总是执行一次。

确保循环内部的某个变量在每次迭代中都朝着退出条件变化。在达到最大计数时添加 EXIT WHEN 语句,对于数据驱动循环来说是一个有用的安全机制。

当迭代次数未知且取决于某个条件时,请使用 WHILE 循环。当需要在固定范围内循环时,请使用 FOR 循环,因为它的计数器是自动管理的。

通常情况下,人工智能可以检查控制变量是否趋向于退出条件,并在没有趋向退出条件时发出警告。但对于退出条件依赖于实时数据的循环,仍然需要进行测试以确保其正确退出。

是的。虽然 WHILE 循环会在其顶部条件变为假时退出,但循环体内部的 EXIT 或 EXIT WHEN 可以提前退出循环,这在处理特殊情况时非常有用。

总结一下这篇文章: