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过程 子程序是一个程序单元/模块执行特定的任务.这些子程序被组合以形成更大的程序.这基本上是被称为“模块化设计”.子程序可以调用由另一个子程序或程序被称为调用程序. 子程序可以创建: ...
随机推荐
- 【ORACLE】oracle11g dg搭建
--------------------------------每个节点和DG------------------------------------------------------------- ...
- JavaScript快速入门-ECMAScript运算符
1.逻辑运算符 逻辑与:&&(and) 逻辑或:||(or) 逻辑非:!(not) 逻辑 AND 运算符(&&) 逻辑 AND 运算的运算数可以是任何类型的,不止是 B ...
- 苹果电脑获取Android Studio的发布版SHA1和开发版SHA1
最近开始转战安卓,准备把我在苹果上的应用也在安卓上来一波,其中就遇到一个问题就是最牛天气(iOS和微信小程序都已经有了,就差安卓的了)引用的百度的定位功能,需要填写发布版SHA1和开发版SHA1,作为 ...
- 【Tableau】电商广告投放的地域分析
分析师的职责是利用处理数据获取信息,提炼规律,帮助企业正确决策业务方向. 所以,一个好的分析师绝不能被数据所困,既要深入业务,理解业务,也要高瞻远瞩,以领导者的思维借助数据分析的辅助做出判断. [结构 ...
- 7. Reverse Integer【Leetcode by java】
Given a 32-bit signed integer, reverse digits of an integer. Example 1: Input: 123 Output: 321 Examp ...
- 2-Eighteenth Scrum Meeting-20151218
任务安排 成员 今日完成 明日任务 闫昊 写完学习进度记录的数据库操作 写完学习进度记录的数据库操作 唐彬 编写与服务器交互的代码 和服务器老师交流讨论区后台接口 史烨轩 获取视频url 尝试使用 ...
- 第一周:通过汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的
姓名:吕松鸿 学号:20135229 ( *原创作品转载请注明出处*) ( 学习课程:<Linux内核分析>MOOC课程http://mooc.study.163.com/course/U ...
- 《Linux内核分析》-- 扒开系统调用的三层皮(下)之system_call中断处理过程 20135311傅冬菁
20135311傅冬菁 原创作品 <Linux内核分析>MOOC课程 分析system_call中断处理过程 内容分析与总结: 系统调用在内核代码中的工作机制和初始化 系统调用在用户态中 ...
- jqgrid查找
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletExcepti ...
- Activiti随着Spring启动自动部署开关
Activiti的act_re_deployment表NAME_列:全部显示SpringAutoDeployment. 查阅Activiti,https://github.com/Activiti/A ...