PL/SQL控制语句(二、循环控制语句)

循环允许重复执行代码直到循环条件匹配,PL/SQL中循环主要有LOOP语句和EXIT语句两种,这两种语句相辅相成,一起组成了PL/SQL的循环结构。在PL/SQL中,循环分为四大类,本文将会讲解其中的3类,最后一类游标FOR循环将在游标篇进行介绍,PL/SQL中常见的3类循环分别如下:

  简单的LOOP循环:这是最基本的循环种类,包含LOOP-END  LOOP语句和一些EXIT退出语句。

  数字式FOR循环:这种循环结构允许指定循环要执行的次数,当指定的次数满足时才退出循环。

  WHILE循环:仅当特定的循环满足时才执行循环,当条件不再满足时终止循环。

EXIT语句也分为如下两种类型:

  EXIT语句:直接退出循环。

  EXIT WHEN语句:当WHEN指定的条件满足时退出循环。

如果一个循环没有退出机制,那么循环循环将无穷地运行下去,通常称之为死循环,死循环会导致很多严重的后果。

1.LOOP循环

  可以使用LOOP-END构造最简单的循环,声明语法如下:

  LOOP

    executeable  statemement(s)

  END LOOP;

  executeable  statement(s)位置放置的是要进行循环的语句块,循环从LOOP语句进入,如果没有显示地退出程序的执行流程将反复地执行executeable  statement语句块。

  2.使用EXIT退出循环

  EXIT语句会强迫循环无条件终止,因此当遇到EXIT语句是,循环会立即终止,并将控制权交给循环下面的语句,EXIT使用语法如下:

  LOOP

    statement 1;

    statement 2;

    IF condition THEN

      EXIT;

    END IF;

  END LOOP;

  statement 3;

在LOOP语句内部使用IF-THEN语法判断condition条件是否成立,如果成立,则执行EXIT退出循环,此时程序执行流程就会跳转到statement 3 中。

3.使用EXTI-WHEN退出循环

PL/SQL提供了EXIT WHEN语句来终止一个循环,该语句与EXIT的不同在于可以在WHEN关键字的后面指定一个循环执行的条件,通常是一个比较表达式或者是一个函数或变量,当返回值为True时,循环立即终止并跳转到循环体外的下一个语句块,其声明语法如下:

  LOOP

    statement 1;

    statement 2;

    EXIT WHEN condition;

    END LOOP;

  statement 3;

EXIT WHEN的使用效果与EXTI的使用效果完全相同,只是使用WHEN子句可以不用再写IF-THEN这样的语法,使得代码更加简洁易懂。

4.使用CONTINUE继续执行循环

与EXIT类似,CONTINUE也会中断当前循环的执行,但是CONTINUE不会马上退出循环,而是将循环执行跳转到语句的开头开始执行下一次循环,CONTINUE允许跳过部分循环执行的代码重新开始另一次循环。

与EXIT相似,CONTINUE也具有一个相似的CONTINUE WHEN子句,使用CONTINUE WHEN子句可以在WHEN关键字后面指定要进行跳转的条件,可以使用CONTINUE WHEN子句简化CONTINUE语句的实现。

每当程序执行到CONTINUE WHEN语句时,WHEN中的条件将被重新计数,如果结果不为True,CONTINUE WHEN将不做任何事,程序的执行继续进行,否则循环中断,跳转到循环体开头重新执行。

5.WHILE-LOOP循环

  简单的LOOP-END LOOP循环有一个特色,即无论循环退出条件是否满足,总是先进入LOOP循环体,执行代码,直到遇上EXIT或EXIT WHEN 子句才判断并退出循环,这使得循环体中的代码至少有机会被执行一次,这种类型的循环也称为出口值守循环。

  而WHILE-LOOP循环在执行循环体中的代码之前先判断一个条件,如果条件一开始就为假,那么一次也不执行代码,这种循环成为入口值守循环。

  WHILE-LOOP循环的声明语法如下所示:

  WHILE entry_condition LOOP

  [counter_management_statements;]

  repeating_statements;

  END LOOP;

可以看到WHILE循环内部包含了一个LOOP-END LOOP循环,但是在WHILE关键字后面需要先指定循环得以进入的条件。

WHILE循环中的条件会在每一次循环时被重新计算,如果条件不为True,则继续执行循环体代码,如果条件为False或NULL,则退出循环。

6.FOR-LOOP循环

PL/SQL的FOR-LOOP循环分为如下两类:

  数字FOR循环:在已知的循环次数内进行循环操作。

  游标FOR循环:用来循环游标结果集。

  数字FOR循环与LOOP和WHILE-LOOP循环的最大的不同在于,在循环开始前已经知道了循环的次数,因此称为数字FOR循环。

1.基本循环结构

  FOR循环的声明语法如下所示:

  FOR loop index IN [ REVERSE ] lowest number .. highest number

  LOOP

    executable statement(s)

  END LOOP;

循环以FOR开头,loop index是循环计数器,IN表示循环将在数字范围内进行循环,可选择REVERSE表示反向由高到低循环,lower number .. highest number 表示数字的低位和数字的高位。

如果循环的上界和下界一致,循环将仅执行一次。

2.使用REVERSE关键字

  默认情况下,循环计数是从低到高进行的,当使用了REVERSE后,循环过程将按由高到低的顺序进行,在每个循环后,循环计数器递减。

3.使用上下边界值

  在代码中,1..3是循环边界值,这个边界值除可以为数字外,还可以是任意的变量、表达式,只要他们是可以赋值的数字,否则PL/SQL会引起预定义的VALUE_ERROR异常。

  在FOR-LOOP循环中,依然可以使用EXIT、EXIT WHEN 和CONTINUE、CONTINUE WHEN语句来及时中断或跳转循环,用法与简单LOOP循环的使用相似。

7.循环语句使用建议

循环功能特性与使用时机
循环语句 建议的使用时机
WHILE-LOOP循环
当需要在循环开始之前判断循环条件时,可以采用WHILE-LOOP循环,这种

类型的循环可能使得循环体一次也不执行。在循环体内必须更改WHILE

循环的判断条件值,防止陷入死循环。

FOR循环
如果循环开始前就知道循环的次数,可以选择FOR循环,在FOR循环中尽量避免

出现EXIT或EXIT WHEN子句,如果出现了这样的语句,那么FOR循环可能并不

适用于当前循环。

简单LOOP循环
当需要确保循环体至少被执行一次时,可以使用LOOP-END LOOP循环,在

循环体中必须使用EXIT WHEN或EXIT语句结束循环,避免出现死循环。

原文地址:https://www.cnblogs.com/harriets-zhang/p/10796895.html

时间: 2024-10-06 06:57:14

PL/SQL控制语句(二、循环控制语句)的相关文章

Oracle PL/SQL之LOOP循环控制语句

在PL/SQL中可以使用LOOP语句对数据进行循环处理,利用该语句可以循环执行指定的语句序列.常用的LOOP循环语句包含3种形式:基本的LOOP.WHILE...LOOP和FOR...LOOP. LOOP语句的基本语法结构如下: [<<label_name>>] LOOP statement... END LOOP [label_name] [语法说明] <<label_name>>:LOOP结构的标签,是可选项. LOOP:LOOP循环开始标志. stat

PL/SQL中LOOP循环控制语句

在PL/SQL中可以使用LOOP语句对数据进行循环处理,利用该语句可以循环执行指定的语句序列.常用的LOOP循环语句包含3种形式:基本的LOOP.WHILE...LOOP和FOR...LOOP. LOOP语句的基本语法结构如下: [<<label_name>>] LOOP statement... END LOOP [label_name] [语法说明] <<label_name>>:LOOP结构的标签,是可选项. LOOP:LOOP循环开始标志. stat

[转载]Oracle PL/SQL之LOOP循环控制语句

在PL/SQL中可以使用LOOP语句对数据进行循环处理,利用该语句可以循环执行指定的语句序列.常用的LOOP循环语句包含3种形式:基本的LOOP.WHILE...LOOP和FOR...LOOP. LOOP语句的基本语法结构如下: [<<label_name>>] LOOP statement... END LOOP [label_name] [语法说明] <<label_name>>:LOOP结构的标签,是可选项. LOOP:LOOP循环开始标志. stat

PL/SQL 编程(二)

1    For循环 语法:begin for i in reverse 1..10 loop insert into users values(i,'奥巴马'): end loop: end; 注意:循环变量 i 是隐含增加的,所以无法看到 2    goto语句 goto 语句用于跳转到特定的位置去执行语句.由于goto语句会减少程序的可读性,所以一般情况下 不建议使用goto语句 3    null语句 null语句不会执行任何操作,但是可以增加程序的可读性 4    创建返回值是一个结果

Python条件控制语句与循环控制语句(四)

程序语言的条件控制语句与循环控制语句都一样,都是if与while还有for等. Python的条件语句是通过一条或多条语句的执行结果(True或false)来决定执行的代码块. If语句一般格式为: If condition_1 : statement block_1 elif condition_2  : Statement block_2 else condition_3 : Statement block_3 如果condition_1条件成立,则执行 statement block_1,

pl/sql(二) 流程控制语句

相当于java中的if else语句 IF  布尔表达式 THENPL/SQL 和 SQL 语句;END IF; IF 布尔表达式 THENPL/SQL 和 SQL 语句;ELSE其它语句;END IF; IF     布尔表达式   THENPL/SQL 和 SQL 语句;ELSIF  其它布尔表达式  THEN其它语句;ELSIF  其它布尔表达式  THEN其它语句;ELSE其它语句;END IF; 提示: ELSIF 不能写成 ELSEIF 要求: 查询出 150号 员工的工资, 若其工

Oracle之PL/SQL编程_流程控制语句

选择语句 1. if...then 语句 语法: if < condition_expression > then plsql_sentence end if; condition_expression:表示一个条件表达式,其值为 true 时,程序会执行 if 下面的 PL/SQL 语句: 如果其值为 false,则程序会跳过if 下面的语句而 直接执行 end if 后边的语句. plsql_sentence:condition_expression 为 true 时,要执行的语句. 2.

PL/SQL(二)PL/SQL块

PL/SQL是一种块结构的语言,一个PL/SQL程序包含了一个或者多个逻辑块,逻辑块中可以声明变量,变量在使用之前必须先声明.除了正常的执行程序外,PL/SQL还提供了专门的异常处理部分进行异常处理.每个逻辑块分为三个部分,语法是: 语法结构:PL/SQL块的语法 [DECLARE --declaration statements] ① BEGIN --executable statements ② [EXCEPTION --exception statements] ③ END; 语法解析:

oracle学习-PL SQL 存储过程中循环、触发器

PL SPL 提供了3中不同类型的循环结构 -- 实例:索引 loop_counter从1开始,到10 结束,循环共执行10次 FOR loop_counter IN 1 .. 10 LOOP ...可执行语句... END LOOP; -- 索引loop_counter从10开始,到1结束,循环共执行10次: FOR loop_counter IN REVERSE 1 .. 10 LOOP ...可执行语句... END LOOP; -- 循环的执行范围取决于变量或者表达式的值: FOR ca

PL/SQL分支、循环语句

CREATE OR REPLACE PROCEDURE PR_TEST2 IS V_CASE NUMBER(5) := 100; BEGIN IF 2 < 1 THEN DBMS_OUTPUT.PUT_LINE('条件成立'); ELSIF 4 > 3 THEN DBMS_OUTPUT.PUT_LINE('条件不成立'); END IF; CASE V_CASE WHEN 1 THEN DBMS_OUTPUT.PUT_LINE('条件匹配=1'); WHEN 100 THEN DBMS_OUT