Oracle循环语句
PL/SQL有四种类型的循环:简单循环、WHILE循环、FOR循环以及游标FOR循环。在这里我们主要讨论前三种,除此之外,还将讨论Oracle 11g中新引入的CONTINUE语句。
一、 简单循环
LOOP
STATEMENT 1;
STATEMENT 2;
...
STATEMENT N;
END LOOP;
上述语句会无限制执行,因为没有语句指定何时可以终止循环。因此,简单循环称为无限循环。
一般循环会有退出条件。退出条件有两种形式:EXIT 和 EXIT WHEN。l两者是等价的。语法分别如下:
LOOP LOOP
STATEMENT 1; STATEMENT 1;
STATEMENT 2; STATEMENT 2;
IF CONDITION THEN EXIT WHEN CONDITION;
EXIT; END LOOP;
END IF;
END LOOP;
如下所示:
DECLARE
v_counter BINARY_INTEGER := 0;
BEGIN
LOOP
v_counter := v_counter+1;
DBMS_OUTPUT.PUT_LINE('v_counter = '||v_counter);
IF v_counter = 5 THEN -->> EXIT语句
EXIT;
END IF;
END LOOP;
END;
DECLARE
v_counter BINARY_INTEGER := 0;
BEGIN
LOOP
v_counter := v_counter+1;
DBMS_OUTPUT.PUT_LINE('v_counter = '||v_counter);
EXIT WHEN v_counter = 5; -->> EXIT WHEN语句
END LOOP;
END;
二、 WHILE循环
WHILE循环的结构如下所示:
WHILE CONDITION LOOP
STATEMENT 1;
STATEMNET 2;
...
STATEMENT N;
END LOOP;
上例简单循环的例子可改写如下:
DECLARE
v_counter BINARY_INTEGER := 0;
BEGIN
WHILE v_counter < 5 LOOP
v_counter := v_counter+1;
DBMS_OUTPUT.PUT_LINE('v_counter = '||v_counter);
END LOOP;
END;
在WHILE循环体中,同样可以使用EXIT和EXIT WHEN语句以提前终止循环
三、 整型值FOR循环
其结构如下:
FOR loop_counter IN [REVERSE] lower_limit..upper_limit LOOP
STATEMENT 1;
STATEMENT 2;
...
STATEMENT N;
END LOOP;
变量loop_counter是隐含定义的索引变量。不需要在PL/SQL语句块的声明部分定义循环计数器。这个变量时循环结构定义的。lower_limit和upper_limit是两个整数数字或者在运行时计算结果为整数值的表达式,双点号(..)是范围操作符。如果使用IN REVERSE,则循环计数器会从upper_limit到lower_limit。
上例简单循环的例子可改写如下:
BEGIN
FOR v_counter IN 1..5 LOOP
DBMS_OUTPUT.PUT_LINE('v_counter = '||v_counter);
END LOOP;
END;
上述讨论的EXIT和EXIT WHEN语句也可以在FOR循环的循环体中使用。
四、 CONTINUE语句
CONTINUE语句有两种形式:CONTINUE和CONTINUE WHEN
CONTINUE语法如下:
IF CONTINUE_CONDITION THEN
CONTINUE;
END IF;
CONTINUE WHEN语法如下:
CONTINUE WHEN CONTINUE_CONDITION;
二者等效。
举例如下,求1到10内偶数的乘积。
DECLARE
v_sum number := 1;
BEGIN
FOR i IN 1..10 LOOP
IF MOD(i,2) != 0 THEN
CONTINUE;
END IF;
v_sum := v_sum*i;
END LOOP;
DBMS_OUTPUT.PUT_LINE('The number is = '||v_sum);
END;
五、嵌套循环
我们已经讨论过三种类型的循环:简单循环、WHILE循环以及FOR循环。任何一种循环都可以嵌套在其他循环中。
试举一例:
DECLARE
v_counter1 INTEGER :=0;
v_counter2 INTEGER;
BEGIN
WHILE v_counter1 < 3 LOOP
DBMS_OUTPUT.PUT_LINE('v_counter1: '||v_counter1);
v_counter2 := 0;
LOOP
DBMS_OUTPUT.PUT_LINE('v_counter2: '||v_counter2);
v_counter2 := v_counter2+1;
EXIT WHEN v_counter2 >= 2;
END LOOP;
v_counter1 := v_counter1+1;
END LOOP;
END;
六、循环标签
循环标签出现在循环的开始处,在循环语句的结尾处使用。在嵌套循环中,循环标签很有必要,因为这会大大提升代码的可读性。
在某些场合,必须使用循环标签,如下例所示:
BEGIN
<<outer>>
FOR v_counter IN 1..3 LOOP
<<inner>>
FOR v_counter IN 1..2 LOOP
DBMS_OUTPUT.PUT_LINE('outer.v_counter '||outer.v_counter);
DBMS_OUTPUT.PUT_LINE('inner.v_counter '||inner.v_counter);
END LOOP inner;
END LOOP outer;
END;
在这里我们用了循环标签,因为内、外部循环都使用了相同的循环计数器v_counter。为了引用v_counter的内部直和外部值,就要使用循环标签。当然,循环标签的名称可任意取。
Oracle循环语句的更多相关文章
- oracle 循环语句
1.基本循环(至少会执行一次) DECLARE I ; BEGIN LOOP --循环开始 DBMS_OUTPUT.PUT_LINE('VALUE:'||I); ; --退出循环条件: I:; --循 ...
- 在存储过程中执行3种oracle循环语句
create or replace procedure pr_zhaozhenlong_loop /* 名称:在存储过程中执行3种循环语句 功能:利用循环给表中插入数据 调用: begin -- Ca ...
- MySQL与Oracle 差异比较之四条件循环语句
循环语句 编号 类别 ORACLE MYSQL 注释 1 IF语句使用不同 IF iv_weekly_day = 'MON' THEN ii_weekly_day := 'MON';ELS ...
- oracle学习--循环语句
oracle学习--循环语句 loop循环: create or replace procedure pro_test_loop is i number; begin i:=0; loop i:=i ...
- Oracle使用语句块之循环插入数据
1.业务要求: 将oracle表A的整表的数据一次性导入到表B中 , 以A_ID为外键关联. (*******如果开发环境和实际生产环境的数据一致,而且数据量比较小情况,可以直接手动添加数据; ** ...
- oracle的控制语句if和循环语句loop while for
pl/sql的控制结构if-then if-then-else if-then-elsif-else 案例1:编写一个过程,可以输入一个雇员名,如果该雇员的工资低于2000,就给该雇员工资增加10% ...
- Oracle中PL/SQL的循环语句
在PL/SQL中可以使用LOOP语句对数据进行循环处理,利用该语句可以循环执行指定的语句序列.常用的LOOP循环语句包含3种形式:基本的LOOP.WHILE...LOOP和FOR...LOOP. LO ...
- Oracle 数据库语句大全
Oracle数据库语句大全 ORACLE支持五种类型的完整性约束 NOT NULL (非空)--防止NULL值进入指定的列,在单列基础上定义,默认情况下,ORACLE允许在任何列中有NULL值. CH ...
- HTML基础--JS简介、基本语法、类型转换、变量、运算符、分支语句、循环语句、数组、函数、函数调用.avi
JS简介 1.JavaScript是个什么东西? 它是个脚本语言,需要有宿主文件,它的宿主文件是HTML文件. 2.它与Java什么关系? 没有什么直接的联系,Java是Sun公司(已被Oracle收 ...
随机推荐
- Android editview 设置只能输入数字、字母和汉字
Android editview 设置只能输入数字.字母和汉字 当处理密码.昵称等特殊情况的时候,往往需要对输入内容加以限制.对于单纯的一种输入法限制可以对键盘和editview熟悉进行控制,而对于多 ...
- CAS 4.0.0RC 配置通过数据库认证用户登录
配置通过数据库认证用户登录 打开webapp\WEB-INF目录下的deployerConfigContext.xml,替换 <bean id="primaryAuthenticati ...
- foremost
foremost 恢复单个类型文件 删除一个 USB(/dev/sdba1)存储器中一个 png 文件然后使用 formost 恢复. #rm -f /dev/sdb1/1.png #foremost ...
- 浅析C语言指针问题
首先明白c语言操作符的优先级及结合性就很容易理解了. 链接 1.关于char *s 及 char s[] char *s指向的是一个字符串对象的指针,可以理解为间接引用,比如 char *s = “1 ...
- 超链接标签a样式生效,取消下划线,文字垂直(上下)居中
直接设置超链接标签a的属性时并不会生效, 需要将display属性改为inline-block, 即style="display:inline-block" 添加标签a时,默认是有 ...
- centos 6.5 中设置mysql 5.1.73 主从同步配置过程
本文章给大家介绍centos 6.5设置mysql主从同步过程记录,希望文章对各位会带来帮助. 涉及到的centos系统均为虚拟机,VM下安装的版本. 在centos 6.5上设置了mysql主从功 ...
- Jquery Mobile 小结
第一次做一个移动站点,当时纠结选Jquery Mobile还是Zepto,Zepto相对于JM更加轻巧,语法上面也很相似,但考虑到时间问题和JM自带了很多组件(Bootstrap惯出来的),还是选择了 ...
- AlwaysON同步的原理及可用模式
新一代读写分离技术——AlwaysOn 早在SQL Server 2005的时候微软就已经实现了数据库的查询分离技术——发布订阅.但生产库和查询库的同步性能较差,时常出现性能问题,因此在大型生产环境中 ...
- AngularJS快速入门指南20:快速参考
thead>tr>th, table.reference>tbody>tr>th, table.reference>tfoot>tr>th, table ...
- Senparc.Weixin.MP SDK 微信公众平台开发教程(三):微信公众平台开发验证
要对接微信公众平台的"开发模式",即对接到自己的网站程序,必须在注册成功之后(见Senparc.Weixin.MP SDK 微信公众平台开发教程(一):微信公众平台注册),等待官方 ...