Oracle PL/SQL 编程入门:第六章 循环控制:Loop 语句的使用

欢迎来到 Oracle PL/SQL 编程入门 的第六章!在这一章中,我们将深入探讨 PL/SQL 中的循环控制结构——LOOP 语句。通过学习 LOOPWHILEFOR 等不同类型的循环语句,你将能够编写更加灵活和高效的程序逻辑。此外,我们还会介绍如何使用 EXITCONTINUE 和嵌套循环等高级功能。准备好迎接新的挑战了吗?让我们开始吧!


第一节:循环控制:Loop 语句

循环控制结构是编程中的重要组成部分,它们允许重复执行一段代码直到满足特定条件。PL/SQL 提供了多种循环控制结构,其中最常用的就是 LOOP 语句。

1.1 简单的 Loops 语句

简单的 LOOP 语句是最基本的循环结构,它会不断执行循环体内的代码,直到遇到 EXITEXIT WHEN 语句。

示例:

DECLARE
  v_counter NUMBER := 1;
BEGIN
  LOOP
    DBMS_OUTPUT.PUT_LINE('当前计数: ' || v_counter);
    v_counter := v_counter + 1;
    
    -- 当计数达到5时退出循环
    EXIT WHEN v_counter > 5;
  END LOOP;
  
  DBMS_OUTPUT.PUT_LINE('循环结束');
END;
/

输出结果:

当前计数: 1
当前计数: 2
当前计数: 3
当前计数: 4
当前计数: 5
循环结束

小贴士:LOOP 语句就像跑步机

LOOP 语句就像是一个跑步机,只要你不按下停止按钮(EXIT),它就会一直运行下去。合理使用 EXITEXIT WHEN 可以让你的循环更加可控。


第二节:EXIT 语句、EXIT WHEN 语句

EXIT 语句用于立即退出当前循环,而 EXIT WHEN 则是在满足某个条件时退出循环。

2.1 使用 EXIT 语句

EXIT 语句可以无条件地退出当前循环。

示例:

DECLARE
  v_counter NUMBER := 1;
BEGIN
  LOOP
    DBMS_OUTPUT.PUT_LINE('当前计数: ' || v_counter);
    v_counter := v_counter + 1;
    
    -- 无条件退出循环
    IF v_counter > 5 THEN
      EXIT;
    END IF;
  END LOOP;
  
  DBMS_OUTPUT.PUT_LINE('循环结束');
END;
/

输出结果:

当前计数: 1
当前计数: 2
当前计数: 3
当前计数: 4
当前计数: 5
循环结束

2.2 使用 EXIT WHEN 语句

EXIT WHEN 语句可以在满足某个条件时退出循环,使代码更加简洁。

示例:

DECLARE
  v_counter NUMBER := 1;
BEGIN
  LOOP
    DBMS_OUTPUT.PUT_LINE('当前计数: ' || v_counter);
    v_counter := v_counter + 1;
    
    -- 当计数达到5时退出循环
    EXIT WHEN v_counter > 5;
  END LOOP;
  
  DBMS_OUTPUT.PUT_LINE('循环结束');
END;
/

输出结果:

当前计数: 1
当前计数: 2
当前计数: 3
当前计数: 4
当前计数: 5
循环结束

小贴士:EXIT WHEN 让退出更优雅

EXIT WHEN 语句就像是一个智能的“停止”按钮,当条件满足时自动退出循环。相比手动检查条件再使用 EXIT,它让代码更加简洁和易读。


第三节:WHILE Loops 语句

WHILE 循环会在每次循环开始前检查条件是否为真,如果条件为真,则执行循环体内的代码;否则退出循环。

示例:

DECLARE
  v_counter NUMBER := 1;
BEGIN
  WHILE v_counter <= 5 LOOP
    DBMS_OUTPUT.PUT_LINE('当前计数: ' || v_counter);
    v_counter := v_counter + 1;
  END LOOP;
  
  DBMS_OUTPUT.PUT_LINE('循环结束');
END;
/

输出结果:

当前计数: 1
当前计数: 2
当前计数: 3
当前计数: 4
当前计数: 5
循环结束

小贴士:WHILE 循环适合前置条件

WHILE 循环非常适合那些需要在每次循环开始前检查条件的情况。它就像是一个守门员,只有符合条件才能进入循环体内。


第四节:Numeric FOR Loops

FOR 循环是一种非常常见的循环结构,它可以简化重复执行某段代码的过程。FOR 循环有两种形式:普通 FOR 循环和带有 REVERSE 选项的 FOR 循环。

4.1 使用 IN 选项

普通的 FOR 循环使用 IN 选项来指定循环的范围。

示例:

BEGIN
  FOR i IN 1..5 LOOP
    DBMS_OUTPUT.PUT_LINE('当前计数: ' || i);
  END LOOP;
  
  DBMS_OUTPUT.PUT_LINE('循环结束');
END;
/

输出结果:

当前计数: 1
当前计数: 2
当前计数: 3
当前计数: 4
当前计数: 5
循环结束

4.2 使用 REVERSE 选项

带有 REVERSE 选项的 FOR 循环会从大到小遍历循环变量。

示例:

BEGIN
  FOR i IN REVERSE 1..5 LOOP
    DBMS_OUTPUT.PUT_LINE('当前计数: ' || i);
  END LOOP;
  
  DBMS_OUTPUT.PUT_LINE('循环结束');
END;
/

输出结果:

当前计数: 5
当前计数: 4
当前计数: 3
当前计数: 2
当前计数: 1
循环结束

4.3 中断循环

FOR 循环中也可以使用 EXITEXIT WHEN 来中断循环。

示例:

BEGIN
  FOR i IN 1..10 LOOP
    DBMS_OUTPUT.PUT_LINE('当前计数: ' || i);
    
    -- 当计数达到5时退出循环
    EXIT WHEN i = 5;
  END LOOP;
  
  DBMS_OUTPUT.PUT_LINE('循环结束');
END;
/

输出结果:

当前计数: 1
当前计数: 2
当前计数: 3
当前计数: 4
当前计数: 5
循环结束

小贴士:FOR 循环让重复更简单

FOR 循环就像是一个自动化的生产线,你可以轻松设定它的起点和终点,甚至可以选择反向运行。合理使用 FOR 循环可以大大简化你的代码。


第五节:CONTINUE 语句

CONTINUE 语句用于跳过当前循环的剩余部分,并继续下一次循环。它有两种形式:CONTINUECONTINUE WHEN

5.1 使用 CONTINUE

CONTINUE 语句无条件跳过当前循环的剩余部分。

示例:

BEGIN
  FOR i IN 1..5 LOOP
    IF i = 3 THEN
      CONTINUE;
    END IF;
    
    DBMS_OUTPUT.PUT_LINE('当前计数: ' || i);
  END LOOP;
  
  DBMS_OUTPUT.PUT_LINE('循环结束');
END;
/

输出结果:

当前计数: 1
当前计数: 2
当前计数: 4
当前计数: 5
循环结束

5.2 使用 CONTINUE WHEN

CONTINUE WHEN 语句在满足某个条件时跳过当前循环的剩余部分。

示例:

BEGIN
  FOR i IN 1..5 LOOP
    CONTINUE WHEN i = 3;
    
    DBMS_OUTPUT.PUT_LINE('当前计数: ' || i);
  END LOOP;
  
  DBMS_OUTPUT.PUT_LINE('循环结束');
END;
/

输出结果:

当前计数: 1
当前计数: 2
当前计数: 4
当前计数: 5
循环结束

小贴士:CONTINUE 让跳过更智能

CONTINUE 语句就像是一个聪明的跳板,当你不想执行某些代码时,它可以帮助你直接跳到下一次循环。合理使用 CONTINUE 可以让你的代码更加高效。


第六节:嵌套 Loops

有时候你需要在一个循环内部再嵌套另一个循环,这种结构称为嵌套循环。嵌套循环可以帮助你处理更复杂的逻辑。

6.1 使用嵌套 Loops

下面是一个简单的嵌套循环示例,展示如何打印乘法表。

示例:

BEGIN
  FOR i IN 1..5 LOOP
    FOR j IN 1..5 LOOP
      DBMS_OUTPUT.PUT_LINE(i || ' * ' || j || ' = ' || (i * j));
    END LOOP;
    DBMS_OUTPUT.PUT_LINE('---');
  END LOOP;
  
  DBMS_OUTPUT.PUT_LINE('循环结束');
END;
/

输出结果:

1 * 1 = 1
1 * 2 = 2
1 * 3 = 3
1 * 4 = 4
1 * 5 = 5
---
2 * 1 = 2
2 * 2 = 4
2 * 3 = 6
2 * 4 = 8
2 * 5 = 10
---
3 * 1 = 3
3 * 2 = 6
3 * 3 = 9
3 * 4 = 12
3 * 5 = 15
---
4 * 1 = 4
4 * 2 = 8
4 * 3 = 12
4 * 4 = 16
4 * 5 = 20
---
5 * 1 = 5
5 * 2 = 10
5 * 3 = 15
5 * 4 = 20
5 * 5 = 25
---
循环结束

6.2 使用 Loop Labels

为了更好地管理嵌套循环,你可以使用标签来标识每个循环。

示例:

<<outer_loop>>
BEGIN
  FOR i IN 1..3 LOOP
    <<inner_loop>>
    FOR j IN 1..3 LOOP
      IF i = 2 AND j = 2 THEN
        EXIT outer_loop; -- 退出外层循环
      END IF;
      
      DBMS_OUTPUT.PUT_LINE('i=' || i || ', j=' || j);
    END LOOP inner_loop;
  END LOOP outer_loop;
  
  DBMS_OUTPUT.PUT_LINE('循环结束');
END;
/

输出结果:

i=1, j=1
i=1, j=2
i=1, j=3
i=2, j=1
循环结束

小贴士:嵌套循环要谨慎使用

嵌套循环就像是俄罗斯套娃,虽然功能强大,但过度嵌套会让代码变得难以阅读和维护。尽量保持代码简洁明了,避免过多的嵌套层次。


第七节:注意事项

在编写 PL/SQL 代码时,有一些常见问题需要注意,以避免潜在的错误和性能问题。

7.1 避免死循环

确保循环中有适当的退出条件,避免陷入死循环。死循环就像是一个永远不会停下的跑步机,会让你的程序无法正常运行。

7.2 合理使用 CONTINUE 和 EXIT

合理使用 CONTINUEEXIT 语句可以让循环更加高效,但也要注意不要滥用,以免影响代码的可读性。

7.3 处理嵌套循环

在处理嵌套循环时,使用标签可以更好地管理各个循环,避免混淆和错误。


第八节:代码挑战

现在是时候来挑战一下自己了!我们将通过几个简单的练习来巩固所学的知识。

挑战一:计算阶乘

编写一个 PL/SQL 块,计算并输出给定数字的阶乘。

示例代码:

DECLARE
  v_number NUMBER := &number; -- 输入数字
  v_factorial NUMBER := 1;
BEGIN
  FOR i IN 1..v_number LOOP
    v_factorial := v_factorial * i;
  END LOOP;
  
  DBMS_OUTPUT.PUT_LINE(v_number || '! = ' || v_factorial);
END;
/

执行说明:

  1. 在 SQL*Plus 或 SQL Developer 中运行上述代码块。
  2. 提示输入数字,例如 5
  3. 输出结果应为 5! = 120

挑战二:打印九九乘法表

编写一个 PL/SQL 块,打印九九乘法表。

示例代码:

BEGIN
  FOR i IN 1..9 LOOP
    FOR j IN 1..9 LOOP
      DBMS_OUTPUT.PUT(i || ' * ' || j || ' = ' || (i * j) || ' ');
    END LOOP;
    DBMS_OUTPUT.PUT_LINE('');
  END LOOP;
END;
/

执行说明:

  1. 在 SQL*Plus 或 SQL Developer 中运行上述代码块。
  2. 输出结果应为完整的九九乘法表。

小贴士:动手实践是最好的老师

理论知识固然重要,但真正的技能提升来自于不断的实践。通过这些挑战,你可以加深对 PL/SQL 的理解,并发现自己可能忽略的小细节。勇敢地面对每一个挑战,你会发现编程其实并没有那么难!


第九节:本章总结

在这一章中,我们深入探讨了 PL/SQL 中的循环控制结构——LOOP 语句以及 EXITCONTINUE 和嵌套循环等高级功能。以下是本章的主要内容总结:

总结要点:

  1. 简单的 Loops 语句:掌握 LOOP 语句的基本用法,包括 EXITEXIT WHEN
  2. WHILE Loops 语句:了解 WHILE 循环的用法,适用于需要在每次循环开始前检查条件的情况。
  3. Numeric FOR Loops:熟悉 FOR 循环的两种形式:普通 FOR 循环和带有 REVERSE 选项的 FOR 循环。
  4. CONTINUE 语句:了解如何使用 CONTINUECONTINUE WHEN 来跳过当前循环的剩余部分。
  5. 嵌套 Loops:掌握如何嵌套循环,并使用标签来管理嵌套循环。
  6. 注意事项:避免死循环,合理使用 CONTINUEEXIT,处理嵌套循环时使用标签。

恭喜你完成了第六章的学习!通过这节课,你已经掌握了 PL/SQL 中的循环控制结构,并为后续更高级的内容打下了坚实的基础。未来的学习中,我们将继续探索 PL/SQL 的更多功能,如异常处理、存储过程等。希望你能继续保持对 PL/SQL 的兴趣,勇敢探索,成为一名熟练的 PL/SQL 用户!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

caifox菜狐狸

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值