ORACLE PL/SQL 实例精解之第六章 迭代控制之一
6.1 简单循环
简单循环,就想其名称一张,是一种最基本循环。简单循环具有如下结构
LOOP
STATEMENT 1;
STATEMENT 2;
...
STATEMENT N;
END LOOP;
保留字LOOP标识简单循环的开始。STATEMENT1到STATEMENT N 是反复执行的语句序列。这些语句由一个或者多个标准的编程结构组成。END LOOP是标识循环结构结束的保留字
每次循环迭代处理时,一些列语句会执行,然后再次执行循环最开始的语句。上述语句序列会无限制的执行,因为没有语句指定何时循环会终止。因此,简单循环称为无穷循环,因为无法退出这个循环,正确构造的循环需要退出条件,退出条件决定循环终止的情况。退出条件有两种形式:EXIT和EXIT WHEN
1. EXIT语句
使用EXIT子句,当EXIT条件为TRUE时,循环会终止。计算EXIT条件时会使用IF语句。当EXIT语句被计算为TRUE时,执行权会转到END LOOP语句后的第一条可执行语句
LOOP
STATEMENT 1;
STATEMENT 2;
IF CONDIDTION THEN
EXIT;
END LOOP;
STATEMENT 3;
2. EXIT WHEN 语句
只有当EXIT WHEN 语句条件的计算结果为TRUE时,才会终止循环。然后,执行权会转到END LOOP 语句之后的第一条可执行语句。
EXIT WHEN子句的循环结构
LOOP
STATEMENT 1;
STATEMENT 2;
EXIT WHEN CONDIDTION;
END LOOP;
STATEMENT 3;
6.1.2 使用带有EXIT WHEN条件的简单循环
6.2 WHILE 循环
WHILE循环结构:
WHILE CONDITION LOOP
STATEMENT 1;
STATEMENT 2;
......
STATEMENT N;
END LOOP;
保留字WHILE标识循环结构的开始。CONDITION是本训话的测试条件,结果为TRUE或者FALSE.测试结果决定是否执行本循环。语句1~N是重复执行的语句序列。END LOOP是标识循环结构结束的保留字
理解:就是先判断CONDIDTION如果是TRUE满足就进入循环,不满足就结束循环直接执行下一条语句
提前终止循环
在WHILE循环体中,可以使用EXIT和EXIT WHEN语句。如果在测试条件为FALSE之前,EXIT条件为TRUE,则循环会被提前终止。如果在EXIT条件为TRUE之前,测试条件为TRUE,测不算作循环提前终止。
WHILE TEST_CONDIDTION LOOP
STATEMENT 1;
STATEMENT 2;
IF EXIT_CONDITION THEN
EXIT;
END IF;
END LOOP;
STATEMENT 3;
或者
WHILE TEST_CONDIDTION LOOP
STATEMENT 1;
STATEMENT 2;
EXIT WHEN EXIT_CONDITION;
END LOOP;
STATEMENT 3
6.3 数值型FOR循环
FOR loop_counter IN [REVERSE] lower_limit..upper_limit loop
STATEMENT 1;
STATEMENT 2;
.....
STATEMENT N;
END LOOP
保留字FOR标识FOR循环结构的开始。变量loop_counter是以已含定义的索引变量,没有必要再PL/SQL语句块的生命部分定义循环计数器。这个变量是循环结构定义的。lower_limit和upper_limit是两个整数数字或者在运行时计算结果为整数值的表达式,双点号。。是范围操作符。lower_limit和upper_limit是两个整数数字或者在运行时计算结果为整数值的表达式,双点号。。是范围操作符。lower_limit和upper_limit定义循环的迭代次数,其值在循环第一次迭代时计算。语句1到N是反复执行的语句序列。END LOOP是标识循环结构结束的保留字。当循环被定义时,保留字IN或者IN REVERSE必须已经存在。如果使用REVERSE保留字,循环计数器会从上限值迭代到下限值。但是限制规范的语法不会变化。下限制始终会被首先引用。
1. 在循环中使用REVERSE选项
在本节前面,当计算机循环计数器的值时,可以使用两个选项:IN和REVERSE.前面已经讨论过在循环中IN选项的用法。下面的例子演示如何在循环中使用IN REVERSE选项
最新文章
- YY前端课1
- KMP---Count the string
- 使用JUnit4进行java单元测试
- sql server 复制需要有实际的服务器名称才能连接到服务器(转载)
- MySQL 常用函数列表
- iOS URL中汉字的编码和解码
- Linux查看进程和终止进程的技巧
- KeepAlived+Nginx实现高可用负载
- 最大信息系数(MIC)——Detecting Novel Associations in Large Data Sets
- 为什么面试你要25K,HR只给你20K?
- Tomcat设置cmd窗口的title属性
- GenerationType四中类型
- C# 下载文件
- RestTemplete
- 【C++ Primer | 10】再探迭代器
- vmware + centos 7安装vmtools时提示The path "" is not a valid path to the xxx kernel header
- Storm UI说明
- How to set the bash display to not show the vim text after exit?
- 第一遍练习:手抄一份 CRUD 并上传截图
- ArcEngine之Provide your license server administrator with the following information.error code =-42
热门文章
- 进程间通信之-信号signal--linux内核剖析(九)
- JDBC连接MySQL数据库的示例代码
- IO模型:同步、异步、阻塞、非阻塞
- 【转载】关于Hash
- 【转载】一致性哈希算法(consistent hashing)
- Node.js 爬虫批量下载美剧 from 人人影视 HR-HDTV
- python的pexpect模块
- android studio 非法字符: &;#39;\ufeff&;#39; 解决方式
- HDU 6096 String 排序 + 线段树 + 扫描线
- ORACLE数据库忘记SYS和SYSTEM密码,SYSTEM被锁定怎么办?