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循环语句的更多相关文章

  1. oracle 循环语句

    1.基本循环(至少会执行一次) DECLARE I ; BEGIN LOOP --循环开始 DBMS_OUTPUT.PUT_LINE('VALUE:'||I); ; --退出循环条件: I:; --循 ...

  2. 在存储过程中执行3种oracle循环语句

    create or replace procedure pr_zhaozhenlong_loop /* 名称:在存储过程中执行3种循环语句 功能:利用循环给表中插入数据 调用: begin -- Ca ...

  3. MySQL与Oracle 差异比较之四条件循环语句

    循环语句 编号 类别 ORACLE MYSQL 注释 1 IF语句使用不同 IF iv_weekly_day = 'MON' THEN       ii_weekly_day := 'MON';ELS ...

  4. oracle学习--循环语句

    oracle学习--循环语句  loop循环: create or replace procedure pro_test_loop is i number; begin i:=0; loop i:=i ...

  5. Oracle使用语句块之循环插入数据

    1.业务要求:  将oracle表A的整表的数据一次性导入到表B中 , 以A_ID为外键关联. (*******如果开发环境和实际生产环境的数据一致,而且数据量比较小情况,可以直接手动添加数据; ** ...

  6. oracle的控制语句if和循环语句loop while for

    pl/sql的控制结构if-then if-then-else if-then-elsif-else 案例1:编写一个过程,可以输入一个雇员名,如果该雇员的工资低于2000,就给该雇员工资增加10% ...

  7. Oracle中PL/SQL的循环语句

    在PL/SQL中可以使用LOOP语句对数据进行循环处理,利用该语句可以循环执行指定的语句序列.常用的LOOP循环语句包含3种形式:基本的LOOP.WHILE...LOOP和FOR...LOOP. LO ...

  8. Oracle 数据库语句大全

    Oracle数据库语句大全 ORACLE支持五种类型的完整性约束 NOT NULL (非空)--防止NULL值进入指定的列,在单列基础上定义,默认情况下,ORACLE允许在任何列中有NULL值. CH ...

  9. HTML基础--JS简介、基本语法、类型转换、变量、运算符、分支语句、循环语句、数组、函数、函数调用.avi

    JS简介 1.JavaScript是个什么东西? 它是个脚本语言,需要有宿主文件,它的宿主文件是HTML文件. 2.它与Java什么关系? 没有什么直接的联系,Java是Sun公司(已被Oracle收 ...

随机推荐

  1. java基础3_流程控制语句

    一 条件判断 1. 条件运算符(三元表达式) ,其形式为: type d = a ? b : c; 具体化形式为:int d = 2 < 1 ? 3 : 4; 2. 轻量级的文本编辑器:Ultr ...

  2. 重新开源UDS

    这个题目起得很纠结. 因为很多人都知道UDS本来就是开源,我只不过改了一些东西,然后重新发布,所以不算重新开源. 要说重新发布也不对.因为老早这东西就发布了. 最后我想,这个东西已经很久没更新过了,也 ...

  3. 搜索栏css代码

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  4. 初入liunx的一些基本的知识

    本系列的博客来自于:http://www.92csz.com/study/linux/ 在此,感谢原作者提供的入门知识 这个系列的博客的目的在于将比较常用的liunx命令从作者的文章中摘录下来,供自己 ...

  5. 管理我的数据之GDBM

    管理我的数据之GDBM 作者 He YiJun – storysnail<at>gmail.com 团队 ls 版权 转载请保留本声明! 本文档包含的原创代码根据General Publi ...

  6. 错误 "sgen.exe" exited with code 1.解决方法(转)

    原文出自 http://blog.sina.com.cn/s/blog_8411d3f401015u1w.html VS中有时候编译项目会出现这样的错误: 错误   "sgen.exe&qu ...

  7. Attic 0.8.1 发布,备份程序

    Attic 0.8.1 修复了昨天刚发布的 Attic 0.8 的一个段错误. Attic 是一个可以保证文件不重复的备份程序.Attic 的主要目标是提供一个高效和安全的方法来备份数据.重复数据删除 ...

  8. LIstView 滚动 异步 加载更多 mono for android ScrollStateChanged ScrollState.Idle; Fling;TouchScroll

    今天项目需要实现一下列表的分页加载 找到了Listview的ScrollStateChanged方法. 和大家分享一下 //先找到Listview ListView order = FindViewB ...

  9. mac下android环境搭建笔记(android studio)

    本文记录了本人在mac上配置android开发环境的一些过程,为了方便直接选用了官方的IDE– Android Studio .本文包括了android studio的安装.创建第一个hello wo ...

  10. ASP.NET 5系列教程 (五):在Visual Studio 2015中使用Grunt、Bower开发Web程序

    基于Visual Studio 2015,你可以: 方便的管理前端包,如jQuery, Bootstrap, 或Angular. 自动运行任务,如LESS.JavaScript压缩.JSLint.Ja ...