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语句结束循环,避免出现死循环。 |
PL/SQL控制语句(二、循环控制语句)的更多相关文章
- Oracle PL/SQL之LOOP循环控制语句
在PL/SQL中可以使用LOOP语句对数据进行循环处理,利用该语句可以循环执行指定的语句序列.常用的LOOP循环语句包含3种形式:基本的LOOP.WHILE...LOOP和FOR...LOOP. LO ...
- PL/SQL中LOOP循环控制语句
在PL/SQL中可以使用LOOP语句对数据进行循环处理,利用该语句可以循环执行指定的语句序列.常用的LOOP循环语句包含3种形式:基本的LOOP.WHILE...LOOP和FOR...LOOP. LO ...
- [转载]Oracle PL/SQL之LOOP循环控制语句
在PL/SQL中可以使用LOOP语句对数据进行循环处理,利用该语句可以循环执行指定的语句序列.常用的LOOP循环语句包含3种形式:基本的LOOP.WHILE...LOOP和FOR...LOOP. LO ...
- oracle学习之路(四) ---------PL/SQL 表,二维数组(TABLE)
LOB类型 ORACLE提供了LOB (Large OBject)类型.用于存储大的数据对象的类型.ORACLE眼下主要支持BFILE, BLOB, CLOB 及 NCLOB 类型. NCLOB 存储 ...
- Oracle PL/SQL中的循环处理(sql for循环)
今天来说下Oracle中的循环迭代处理,因为从自己的博客统计中看到,不少网友都搜索了关键字"SQL FOR循环",所以打算在这里说下个人的理解. PL/SQL也和我们常用的编程语言 ...
- PL/SQL 编程(二)
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/u011685627/article/details/26299399 1 For循环 ...
- pl/sql programming 05 循环迭代处理
使用循环应考虑的因素 1. 循环什么时候结束 2. 什么时候测试是否该结束循环 3. 采用这种循环的原因 1. 普通循环(简单循环) 使用场合, 不能确定循环执行多少次, 要求循环至少执行一次. 另外 ...
- 二十二、oracle pl/sql分类二 函数
函数用于返回特定的数据,当建立函数时,在函数头部必须包含return子句.而在函数体内必须包含return语句返回的数据.我们可以使用create function来建立函数. 1).接下来通过一个案 ...
- oracle pl/sql中的循环及if语句
for循环 /* for循环打印1到10 */ set serveroutput on; declare begin .. loop dbms_output.put_line(i); end loop ...
- 【PL/SQL编程】循环语句
1. loop语句 loop plsql_sentence; exit when end_condition_exp; end loop; loop语句会先执行一次循环体,然后再判断“exit whe ...
随机推荐
- Rhythmk 一步一步学 JAVA (18): Enum枚举学习
枚举定义: public enum SizeEnum { SMALL, BIG, BIGEST }; public enum SizeStringEnum { SMALL("小") ...
- Mysql 性能分析 Explain
Mysql Query Optmize: 查询优化器, SQL语句会给Query Optimize他会执行他认为最优的方式.. Mysql 常见问题 CPU饱和,IO磁盘发生在装入数据大于内存时. E ...
- 为什么需要maven,maven能解决什么问题 ,maven是什么
- 实例: Java代码操作oracle数据库(JDBC+sevrlet+jsp+html)
1, 注册页面 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Strict//EN" "http://www.w3.or ...
- Matlab界面清洗
保持干净清爽的编程界面可以给人以简洁明朗的享受,Matlab可以对涉及到的4个界面进行清洗: ① Clear Figure ; ② Clear Command window; ③ Clear Wor ...
- 并发包下常见的同步工具类详解(CountDownLatch,CyclicBarrier,Semaphore)
目录 1. 前言 2. 闭锁CountDownLatch 2.1 CountDownLatch功能简介 2.2 使用CountDownLatch 2.3 CountDownLatch原理浅析 3.循环 ...
- ampify shader工具学习一
如何使用lambert Amplify Shader Editor 1.5.3 高级shader编辑工具 2018_5 点击下载
- cmake条件编译
CMake的条件编译基于if elseif endif.3.0版本具体语法如下 if(expression) # then section. COMMAND1(ARGS ...) COMMAND2(A ...
- 部署MVC项目ManagedPipelineHandler报错
"处理程序ExtensionlessUrlHandler-Integrated-4.0在其模块列表中有一个错误模块ManagedPipelineHandler": 解决方法:以管理 ...
- [Selenium] Java代码获取屏幕分辨率
import java.awt.Dimension; import java.awt.GraphicsEnvironment; import java.awt.Insets; import java. ...