SQL记录-PLSQL循环
PL/SQL循环
可能有一种情况,当需要执行的代码块的几个多次。在一般情况下,语句顺序执行:一个函数的第一条语句,首先执行,然后是第二个...等等。
编程语言提供了各种控制结构,允许更多复杂的执行路径。
循环语句可以让我们执行语句多次或一个组,下面是在大多数编程语言循环语句的一般形式:

PL/ SQL提供了循环以下类型的处理循环的要求。点击以下链接查看详细信息。
| 循环类型 | 描述 |
|---|---|
| PL/SQL基础循环 | 在这个循环结构,语句序列封闭在LOOP和END LOOP语句之间。在每次迭代中,语句序列被执行,然后在循环的顶部恢复控制 |
| PL/SQL WHILE循环 | 重复声明语句或一组,而给定的条件为真,它测试条件执行循环体前 |
| PL/SQL FOR循环 | 执行语句序列多次和简写管理该循环变量的代码 |
| PL/SQL内嵌循环 | 可以使用一个或多个循环中的任何其它基本回路,同时或循环 |
标记一个PL/SQL循环
PL/ SQL循环可以被标记。标记应该用双尖括号括起来(<<和>>),并出现在LOOP语句的开头。标签名称也可以出现在循环语句结束。可以使用标签在EXIT语句从循环退出。
下面的程序说明了这个概念:
DECLARE
i number(1);
j number(1);
BEGIN
<< outer_loop >>
FOR i IN 1..3 LOOP
<< inner_loop >>
FOR j IN 1..3 LOOP
dbms_output.put_line('i is: '|| i || ' and j is: ' || j);
END loop inner_loop;
END loop outer_loop;
END;
/
当上述代码在SQL提示符执行时,它产生了以下结果:
i is: 1 and j is: 1
i is: 1 and j is: 2
i is: 1 and j is: 3
i is: 2 and j is: 1
i is: 2 and j is: 2
i is: 2 and j is: 3
i is: 3 and j is: 1
i is: 3 and j is: 2
i is: 3 and j is: 3 PL/SQL procedure successfully completed.
循环控制语句
循环控制语句改变其正常的顺序执行。当执行离开范围,在该范围内创建的所有对象自动被销毁。
PL/ SQL支持以下控制语句。标记循环也采取了循环外的控制。点击以下链接查看他们的详细资料。
| 控制语句 | 描述 |
|---|---|
| EXIT语句 | 在EXIT语句END LOOP后立即完成返回,控制进到该语句 |
| CONTINUE语句 | 将导致循环跳过其主体的其余部分,并立即重新测试其使用情况声明之前 |
| GOTO语句 | 控制权转移给标签的语句。虽然不建议在程序中使用GOTO语句 |
PL/SQL基本循环语句
基本的循环结构封装在LOOP和END LOOP语句之间语句序列。随着每次迭代,语句顺序被执行,然后在循环的顶部控制过程。
语法:
PL/SQL编程语言的一个基本循环的语法是:
LOOP
Sequence of statements;
END LOOP;
在这里,声明(S)的序列可以是单个语句或语句块。 EXIT指令或EXIT WHEN语句需要退出循环。
示例:
DECLARE
x number := 10;
BEGIN
LOOP
dbms_output.put_line(x);
x := x + 10;
IF x > 50 THEN
exit;
END IF;
END LOOP;
-- after exit, control resumes here
dbms_output.put_line('After Exit x is: ' || x);
END;
/
当上述代码在SQL提示符执行时,它产生了以下结果:
10
20
30
40
50
After Exit x is: 60 PL/SQL procedure successfully completed.
可以使用EXIT WHEN语句,而不是EXIT语句:
DECLARE
x number := 10;
BEGIN
LOOP
dbms_output.put_line(x);
x := x + 10;
exit WHEN x > 50;
END LOOP;
-- after exit, control resumes here
dbms_output.put_line('After Exit x is: ' || x);
END;
/
当上述代码在SQL提示符执行时,它产生了以下结果:
10
20
30
40
50
After Exit x is: 60 PL/SQL procedure successfully completed.
PL/SQL WHILE循环语句
WHILE循环语句在PL/SQL编程语言,只要给定的条件为真,则执行目标语句多次。
语法:
WHILE condition LOOP
sequence_of_statements
END LOOP;
示例:
DECLARE
a number(2) := 10;
BEGIN
WHILE a < 20 LOOP
dbms_output.put_line('value of a: ' || a);
a := a + 1;
END LOOP;
END;
/
当上述代码在SQL提示符执行时,它产生了以下结果:
value of a: 10
value of a: 11
value of a: 12
value of a: 13
value of a: 14
value of a: 15
value of a: 16
value of a: 17
value of a: 18
value of a: 19 PL/SQL procedure successfully completed.
PL/SQL FOR循环语句
FOR循环重复的控制结构,可以有效地编写需要执行的特定次数的循环。
语法:
FOR counter IN initial_value .. final_value LOOP
sequence_of_statements;
END LOOP;
下面是控制在一个流程的循环:
初始步骤首先被执行,并且只有一次。这一步可以声明和初始化任何循环控制变量。
接着,condition,initial_value.. final_value 进行计算。如果为true,则执行循环体。如果为false,在循环体不执行,只是之后的for循环流量控制跳转到下一条语句。
循环体的执行后,计数器变量的值被增加或减少。
条件现在重新计算。如果为true,循环执行的过程重复(循环体,然后增加步,然后再次条件)。之后条件为false,则FOR-LOOP终止。
以下是PL/SQL for循环的一些特点:
initial_value 和 循环变量 或计算器 final_value 可以是字面值,变量或表达式,但必须计算结果为数字。否则,PL/SQL就会抛出预定义异常VALUE_ERROR。
initial_value不必为1; 但是循环计数器增量(或减量)必须为1。
PL/SQL允许动态确定在运行时的循环范围。
示例:
DECLARE
a number(2);
BEGIN
FOR a in 10 .. 20 LOOP
dbms_output.put_line('value of a: ' || a);
END LOOP;
END;
/
当上述代码在SQL提示符执行时,它产生了以下结果:
value of a: 10
value of a: 11
value of a: 12
value of a: 13
value of a: 14
value of a: 15
value of a: 16
value of a: 17
value of a: 18
value of a: 19
value of a: 20 PL/SQL procedure successfully completed.
反转FOR循环语句
缺省情况下,迭代前进从初始值到最终值,大体是由上界到下界约束。可以通过使用REVERSE关键字顺序相反。在这种情况下,迭代前进的其他方式。每次迭代后循环计数器递减。
但是,必须写的范围边界在升序(非下降)的顺序。下面的程序说明了这一点:
DECLARE
a number(2) ;
BEGIN
FOR a IN REVERSE 10 .. 20 LOOP
dbms_output.put_line('value of a: ' || a);
END LOOP;
END;
/
当上述代码在SQL提示符执行时,它产生了以下结果:
value of a: 20
value of a: 19
value of a: 18
value of a: 17
value of a: 16
value of a: 15
value of a: 14
value of a: 13
value of a: 12
value of a: 11
value of a: 10 PL/SQL procedure successfully completed.
PL/SQL嵌套循环
PL/SQL允许使用一个循环内嵌套另一个循环。下面的内容展示几个例子来说明这个概念。
在PL/SQL嵌套基本LOOP语句的语法如下:
LOOP
Sequence of statements1
LOOP
Sequence of statements2
END LOOP;
END LOOP;
在PL/SQL 循环FOR语句嵌套的语法如下:
FOR counter1 IN initial_value1 .. final_value1 LOOP
sequence_of_statements1
FOR counter2 IN initial_value2 .. final_value2 LOOP
sequence_of_statements2
END LOOP;
END LOOP;
在Pascal嵌套WHILE 循环语句的语法如下:
WHILE condition1 LOOP
sequence_of_statements1
WHILE condition2 LOOP
sequence_of_statements2
END LOOP;
END LOOP;
示例:
下面的程序使用一个基本嵌套循环,找出2-100中的素数:
DECLARE
i number(3);
j number(3);
BEGIN
i := 2;
LOOP
j:= 2;
LOOP
exit WHEN ((mod(i, j) = 0) or (j = i));
j := j +1;
END LOOP;
IF (j = i ) THEN
dbms_output.put_line(i || ' is prime');
END IF;
i := i + 1;
exit WHEN i = 50;
END LOOP;
END;
/
当上述代码在SQL提示符执行时,它产生了以下结果:
2 is prime
3 is prime
5 is prime
7 is prime
11 is prime
13 is prime
17 is prime
19 is prime
23 is prime
29 is prime
31 is prime
37 is prime
41 is prime
43 is prime
47 is prime PL/SQL procedure successfully completed.
SQL记录-PLSQL循环的更多相关文章
- SQL记录-PLSQL记录
PL/SQL记录 PL/SQL记录就是可以容纳不同类型的数据项的数据结构.记录由不同字段,类似于数据库表的行. 例如,要保留跟踪图书馆中的书籍.可能要跟踪有关每本书下面的属性类似:标题,作者,主题 ...
- SQL记录-PLSQL基本语法与数据类型
PL/SQL基本语法 PL/SQL是一种块结构的语言,这意味着PL/SQL程序被划分和编写代码的逻辑块.每块由三个子部分组成: S.N. 段和说明 1 声明 此部分开头使用关键字DECLARE.它是一 ...
- SQL记录-PLSQL游标
PL/SQL游标 Oracle会创建一个存储区域,被称为上下文区域,用于处理SQL语句,其中包含需要处理的语句,例如所有的信息,行数处理,等等. 游标是指向这一上下文的区域. PL/SQL通过控制光标 ...
- SQL记录-PLSQL条件控制
PL/SQL条件控制 决策结构需要程序员指定一个或多个条件要计算,或由程序进行测试,如果条件被确定为真那么一条或多条语句被执行,如果要被执行的其它语句条件被确定为假,则选其它执行块. 以下是从在大 ...
- SQL记录-PLSQL变量与常量文字
PL/SQL变量 变量是只不过是一个给定的存储区域,程序可以操纵的名称.PL/SQL每个变量具有一个特定的数据类型,它决定了大小和变量的存储器的值,可以说存储器和设置操作可以施加到可变内被存储的范 ...
- SQL记录-PLSQL包
PL/SQL包 PL/SQL包是组逻辑相关的PL/SQL类型,变量和子程序模式对象. 程序包将有两个强制性的部分: 包装规范定义 包体或定义 包装规范定义 规范是接口到包.它只是声明的类型,变量,常量 ...
- SQL记录-PLSQL触发器
PL/SQL触发器 触发器是存储程序,它会自动执行或发射当一些事件发生.触发器,事实上,写入响应于以下任一事件将被执行: 数据库操作(DML)语句(DELETE,INSERT,UPDATE或) 数据库 ...
- SQL记录-PLSQL函数
PL/SQL函数 PL/SQL函数与过程相同,不同之处在于函数有一个返回值.因此,前面的章节中的所有讨论都适用于函数. 创建函数 建立一个独立函数可以使用CREATE FUNCTION语句创建.CRE ...
- SQL记录-PLSQL过程
PL/SQL过程 子程序是一个程序单元/模块执行特定的任务.这些子程序被组合以形成更大的程序.这基本上是被称为“模块化设计”.子程序可以调用由另一个子程序或程序被称为调用程序. 子程序可以创建: ...
随机推荐
- R绘图 第四篇:绘制箱图(ggplot2)
箱线图通过绘制观测数据的五数总括,即最小值.下四分位数.中位数.上四分位数以及最大值,描述了变量值的分布情况.箱线图能够显示出离群点(outlier),离群点也叫做异常值,通过箱线图能够很容易识别出数 ...
- ElasticSearch入门 第三篇:索引
这是ElasticSearch 2.4 版本系列的第三篇: ElasticSearch入门 第一篇:Windows下安装ElasticSearch ElasticSearch入门 第二篇:集群配置 E ...
- LeetCode 刷题笔记 1. 两数之和(Two Sum)
tag: 栈(stack) 题目描述 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案. ...
- kaggle 欺诈信用卡预测——Smote+LR
from:https://zhuanlan.zhihu.com/p/30461746 本项目需解决的问题 本项目通过利用信用卡的历史交易数据,进行机器学习,构建信用卡反欺诈预测模型,提前发现客户信用卡 ...
- PHP 设计模式六大原则
http://www.cnblogs.com/yujon/p/5536118.html 设计模式六大原则(1):单一职责原则 不要存在多于一个导致类变更的原因.通俗的说,即一个类只负责一项职责 设计模 ...
- PAT甲题题解-1051. Pop Sequence (25)-堆栈
将1~n压入最多为m元素的栈 给出k个出栈序列,问你是否能够实现. 能输出YES 否则NO 模拟一遍即可,水题. #include <iostream> #include <cstd ...
- PAT甲题题解-1058. A+B in Hogwarts (20)-大水题
无语,这种水题还出,浪费时间,但又不得不A... #include <iostream> #include <cstdio> #include <algorithm> ...
- PAT甲题题解-1107. Social Clusters (30)-PAT甲级真题(并查集)
题意:有n个人,每个人有k个爱好,如果两个人有某个爱好相同,他们就处于同一个集合.问总共有多少个集合,以及每个集合有多少人,并按从大到小输出. 很明显,采用并查集.vis[k]标记爱好k第一次出现的人 ...
- M1阶段事后分析
M1阶段的开发结束了,在周四的课上我们组也进行了alpha阶段的汇报.我们的努力得到了应有的回报,下面我们将针对M1阶段产生的一些问题进行分析和反思. 一.设想和目标 1.我们的app更像是一款针对北 ...
- 【Alpha】第三次Scrum meeting
今日任务一览: 导航栏诞生 前期准备的Latex文本将撰写完毕 生成燃尽图的问题已经解决 姓名 今日完成任务 所耗时间 刘乾 用Github成功生成了燃尽图(真是不容易啊...),与架构师继续每日面基 ...