循环允许重复执行代码直到循环条件匹配,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语句结束循环,避免出现死循环。

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

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

    在PL/SQL中可以使用LOOP语句对数据进行循环处理,利用该语句可以循环执行指定的语句序列.常用的LOOP循环语句包含3种形式:基本的LOOP.WHILE...LOOP和FOR...LOOP. LO ...

  2. PL/SQL中LOOP循环控制语句

    在PL/SQL中可以使用LOOP语句对数据进行循环处理,利用该语句可以循环执行指定的语句序列.常用的LOOP循环语句包含3种形式:基本的LOOP.WHILE...LOOP和FOR...LOOP. LO ...

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

    在PL/SQL中可以使用LOOP语句对数据进行循环处理,利用该语句可以循环执行指定的语句序列.常用的LOOP循环语句包含3种形式:基本的LOOP.WHILE...LOOP和FOR...LOOP. LO ...

  4. oracle学习之路(四) ---------PL/SQL 表,二维数组(TABLE)

    LOB类型 ORACLE提供了LOB (Large OBject)类型.用于存储大的数据对象的类型.ORACLE眼下主要支持BFILE, BLOB, CLOB 及 NCLOB 类型. NCLOB 存储 ...

  5. Oracle PL/SQL中的循环处理(sql for循环)

    今天来说下Oracle中的循环迭代处理,因为从自己的博客统计中看到,不少网友都搜索了关键字"SQL FOR循环",所以打算在这里说下个人的理解. PL/SQL也和我们常用的编程语言 ...

  6. PL/SQL 编程(二)

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/u011685627/article/details/26299399 1    For循环      ...

  7. pl/sql programming 05 循环迭代处理

    使用循环应考虑的因素 1. 循环什么时候结束 2. 什么时候测试是否该结束循环 3. 采用这种循环的原因 1. 普通循环(简单循环) 使用场合, 不能确定循环执行多少次, 要求循环至少执行一次. 另外 ...

  8. 二十二、oracle pl/sql分类二 函数

    函数用于返回特定的数据,当建立函数时,在函数头部必须包含return子句.而在函数体内必须包含return语句返回的数据.我们可以使用create function来建立函数. 1).接下来通过一个案 ...

  9. oracle pl/sql中的循环及if语句

    for循环 /* for循环打印1到10 */ set serveroutput on; declare begin .. loop dbms_output.put_line(i); end loop ...

  10. 【PL/SQL编程】循环语句

    1. loop语句 loop plsql_sentence; exit when end_condition_exp; end loop; loop语句会先执行一次循环体,然后再判断“exit whe ...

随机推荐

  1. win10 切换语言英文版

    win10 切换英文语言 start > right click>control panel> time Language>laguage>Add >English ...

  2. WebLogic Server StuckThreadMaxTime value is exceeded during configuration

    WebLogic Server StuckThreadMaxTime value is exceeded during configuration If you are configuring Web ...

  3. IBM X3650 M4 主板故障

    故障描述: 今天突然接到报警,一台服务器无法连通,无法登录.无法 ping 通. 打电话到 IDC ,授权工程师查看服务器状态,返回结果如下: 1.服务器关机状态 2.无法开机 ( 电源灯亮 ),按开 ...

  4. k8s 1.10 关于rbac的坑

    apiserver  启动加上--authorization-mode=RBAC 开启rbac 会生成默认role,最高权限位cluster-admin的cluster role 再关闭rbac(不加 ...

  5. Create a Basic Shader in Shader Forge

    [Create a Basic Shader in Shader Forge] 1.打开ShaderForge.Window-> Shader Forge.(打开速度较慢) 2.通过NewSha ...

  6. NBU 还原windows ORACLE数据库(EC)

    rman target / startup nomount; run{ allocate channel ch00 type 'SBT_TAPE'; send 'nb_ora_serv=nbumast ...

  7. DropDownList控件的使用方法

    1. 使用代码添加数据 <asp:DropDownList ID="DropDownList1" runat="server"> </asp: ...

  8. WebLogic(12C)——几个基本概念

    转http://blog.csdn.net/hanxuemin12345/article/details/46287597 目录(?)[-] 域Domain 服务器Server 机器Machine W ...

  9. mysql常见错误/usr/local/mysql/bin/mysqld: [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.

    出现这种情况多数是找不到data目录,还有就是对data目录没有写入权限.

  10. Java 设计模式系列(二三)访问者模式(Vistor)

    Java 设计模式系列(二三)访问者模式(Vistor) 访问者模式是对象的行为模式.访问者模式的目的是封装一些施加于某种数据结构元素之上的操作.一旦这些操作需要修改的话,接受这个操作的数据结构则可以 ...