PL/SQL流程控制

  PL/SQL程序中的流程控制语句借鉴了许多高级语言的流程控制思想,但又有自己的特点。

条件控制

    下面通过实例介绍条件控制语句的使用。
    1. if..then..end if条件控制
    采用if..then..end if条件控制的语法结构如图9.15所示。

    在【SQLPlus Worksheet】中执行下列PL/SQL程序,该程序判断两个整数变量的大小。 执行结果如图9.16所示。
    ―――――――――――――――――――――――――――――――――――――
    set serveroutput on
    declare
       number1 integer:=90;
       number2 integer:=60;
    begin
       if number1>=number2 then
           dbms_output.put_line('number1大于等于number2');
       end if;
    end;
    ―――――――――――――――――――――――――――――――――――――
    【配套程序位置】:第9章\ conditioncontrol1.sql。

    2. if..then..else..end if条件控制
    采用if..then..else..end if条件控制的语法结构如图9.17所示。

    在【SQLPlus Worksheet】中执行下列PL/SQL程序,该程序判断两个整数变量的大小,输出不同的结果。执行结果如图9.18所示。
    ―――――――――――――――――――――――――――――――――――――
    set serveroutput on
    declare
        number1 integer:=80;
        number2 integer:=90;
    begin
        if number1>=number2 then
            dbms_output.put_line('number1大于等于number2');
        else
            dbms_output.put_line('number1小于number2');
        end if;
    end;
    ―――――――――――――――――――――――――――――――――――――
    【配套程序位置】:第9章\ conditioncontrol2.sql。

    3. if嵌套条件控制
    采用if嵌套条件控制的语法结构如图9.19所示。

    在【SQLPlus Worksheet】中执行下列PL/SQL程序,该程序判断两个整数变量的大小,输出不同的结果。
    执行结果如图9.20所示。
    ―――――――――――――――――――――――――――――――――――――
    set serveroutput on
    declare
        number1 integer:=80;
        number2 integer:=90;
    begin
        if number1<=number2 then
           if number1=number2 then
              dbms_output.put_line('number1等于number2');
           else
              dbms_output.put_line('number1小于number2');
           end if;
        else
              dbms_output.put_line('number1大于number2');
        end if;
    end;
    ―――――――――――――――――――――――――――――――――――――
    【配套程序位置】:第9章\ conditioncontrol3.sql。

循环控制

    循环结构是按照一定逻辑条件执行一组命令,PL/SQL中有4种基本循环结构,在它们基础上又可以演变出许多嵌套循环控制,这里介绍最基本的循环控制语句。
    1. loop..exit..end loop循环控制
    采用loop..exit..end loop循环控制的语法结构如图9.21所示。

    在【SQLPlus Worksheet】中执行下列PL/SQL程序,该程序将number1变量每次加1,一直到等于number2为止,统计输出循环次数。
    ―――――――――――――――――――――――――――――――――――――
    set serveroutput on
    declare
        number1 integer:=80;
        number2 integer:=90;
        i integer:=0;
    begin
       loop
          number1:=number1+1;
          if number1=number2 then
             exit;
          else
             i:=i+1;
          end if;
      end loop;
     dbms_output.put_line('共循环次数:'||to_char(i));
    end;
    ―――――――――――――――――――――――――――――――――――――
    执行结果如图9.22所示。

    【配套程序位置】:第9章\loopcontrol1.sql。
    2. loop..exit..when..end loop循环控制
    采用loop..exit..when..end loop循环控制的语法结构与图9.21所示结构类似。
    exit when实际上就相当于
        if 条件 then
        exit;
      end if;
    在【SQLPlus Worksheet】中执行下列PL/SQL程序,该程序将number1变量每次加1,一直到等于number2为止,统计输出循环次数。
    ―――――――――――――――――――――――――――――――――――――
    set serveroutput on
    declare
        number1 integer:=80;
        number2 integer:=90;
        i integer:=0;
    begin
        loop
           number1:=number1+1;
           i:=i+1;
           exit when number1=number2;
        end loop;
     dbms_output.put_line('共循环次数:'||to_char(i));
    end;
    ―――――――――――――――――――――――――――――――――――――
    执行结果如图9.23所示。

    【配套程序位置】:第9章\loopcontrol2.sql。
    when循环控制结束条件比采用if的条件控制结束循环次数多1次。
    3. while..loop..end loop循环控制
    采用loop..exit..when..end loop循环控制的语法如下。
    while 条件 loop
       执行语句段;
    end loop;
    在【SQLPlus Worksheet】中执行下列PL/SQL程序,该程序将number1变量每次加1,一直到等于number2为止,统计输出循环次数。
    ―――――――――――――――――――――――――――――――――――――
    set serveroutput on
    declare
        number1 integer:=80;
        number2 integer:=90;
        i integer:=0;
    begin
        while number1<number2 loop
          number1:=number1+1;
          i:=i+1;
       end loop;
     dbms_output.put_line('共循环次数:'||to_char(i));
    end;
    ―――――――――――――――――――――――――――――――――――――
    执行结果如图9.24所示。

    【配套程序位置】:第9章\whilecontrol.sql。
    4. for..in..loop..end循环控制
    采用for..in..loop..end循环控制的语法如下。
    for 循环变量 in [reverse] 循环下界..循环上界 loop
        循环处理语句段;
    end loop;
    在【SQLPlus Worksheet】中执行下列PL/SQL程序,该程序通过循环变量I来控制number1增加次数,输出结果。执行结果如图9.25所示。
    ―――――――――――――――――――――――――――――――――――――
    set serveroutput on
    declare
       number1 integer:=80;
       number2 integer:=90;
       i integer:=0;
    begin
        for i in 1..10 loop
          number1:=number1+1;
        end loop;
      dbms_output.put_line('number1的值:'||to_char(number1));
    end;
    ―――――――――――――――――――――――――――――――――――――
    【配套程序位置】:第9章\forcontrol.sql。

时间: 2025-01-26 21:49:11

PL/SQL流程控制的相关文章

PL/SQL流程控制(原创)

概述 类似于高级语言,流程控制语句是PL/SQL语言的重要组成部分.这些流程控制语句使得PL/SQL加大了代码的灵活性和多样性,大大简化了程序的编写.下面将列出流程控制语句并给出具体事例. 条件分支结构if IF ... THEN ... END IF   IF condition THEN       statement   END IF;判断condition是否成立,成立就执行IF 与END IF 之间的语句.例:输入员工编号,查询其工资,如果他们的职位是CLERK,则工资增加%,再显示修

[推荐]ORACLE PL/SQL编程详解之三:PL/SQL流程控制语句(不给规则,不成方圆)

原文:[推荐]ORACLE PL/SQL编程详解之三:PL/SQL流程控制语句(不给规则,不成方圆) [推荐]ORACLE PL/SQL编程详解之三: PL/SQL流程控制语句(不给规则,不成方圆) --通过知识共享树立个人品牌. 继上五篇:    [顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之功)    [推荐]ORACLE PL/SQL编程之四:把游标说透(不怕做不到,只怕想不到)        [推荐]ORACLE PL/SQL编程之五:异常

PL/SQL2—— 流程控制

原文转自  一沙弥的世界  的博客  类似于高级语言,流程控制语句是PL/SQL语言的重要组成部分.这些流程控制语句使得PL/SQL加大了代码的灵活性和多样性,大大简化了 程序的编写.下面将列出流程控制语句并给出具体事例.     一.顺序结构     按代码的书写顺序依次执行     --在下面的示例中将逐步执行代码         scott@ORCL> declare               v_ename varchar2(20);               v_job emp.j

SQL 流程控制命令

Transact-SQL 语言使用的流程控制命令与常见的程序设计语言类似主要有以下几种控制命令. 4.6.1 IF-ELSE其语法如下:IF <条件表达式><命令行或程序块>[ELSE [条件表达式]<命令行或程序块>]其中<条件表达式>可以是各种表达式的组合,但表达式的值必须是逻辑值"真"或"假".ELSE子句是可选的,最简单的IF语句没有ELSE子句部分.IF-ELSE用来判断当某一条件成立时执行某段程序,条件不成

MS SQL基础教程:SQL流程控制命令

Transact-SQL 语言使用的流程控制命令与常见的程序设计语言类似主要有以下几种控制命令. 4.6.1 IF-ELSE 其语法如下: IF <条件表达式> <命令行或程序块> [ELSE [条件表达式] <命令行或程序块>] 其中<条件表达式>可以是各种表达式的组合,但表达式的值必须是逻辑值"真"或"假".ELSE子句是可选的,最简单的IF语句没有ELSE子句部分.IF-ELSE用来判断当某一条件成立时执行某段程

MSSQL基础教程之SQL流程控制命令

Transact-SQL 语言使用的流程控制命令与常见的程序设计语言类似主要有以下几种控制命令. 4.6.1 IF-ELSE 其语法如下: IF <条件表达式> <命令行或程序块> [ELSE [条件表达式] <命令行或程序块>] 其中<条件表达式>可以是各种表达式的组合,但表达式的值必须是逻辑值"真"或"假".ELSE子句是可选的,最简单的IF语句没有ELSE子句部分.IF-ELSE用来判断当某一条件成立时执行某段程

PL/SQL --&amp;gt; 流程控制

--======================= --  PL/SQL --> 流程控制 --=======================       类似于高级语言,流程控制语句是PL/SQL语言的重要组成部分.这些流程控制语句使得PL/SQL加大了代码的灵活性和多样性,大大简化了 程序的编写.下面将列出流程控制语句并给出具体事例.     一.顺序结构     按代码的书写顺序依次执行     --在下面的示例中将逐步执行代码         scott@ORCL> declare v

PL/SQL --&amp;gt; DML 触发器

--======================= -- PL/SQL --> DML 触发器 --=======================         何谓触发器?简言之,是一段命名的PL/SQL代码块,只不过该代码块在特定的条件下被触发并且执行.对于这样的代码我们称之为触发器 .触发器根据触发类型的不同又分为不同级别的触发器,下面将给出触发器的分类,定义,以及使用的示例.   一.触发器的相关概念     1.触发器的分类         通常根据触发条件以及触发级别的不同分为DM

PL/SQL --&amp;gt; INSTEAD OF 触发器

--============================== -- PL/SQL --> INSTEAD OF 触发器 --==============================       INSTEAD OF 触发器常用于管理编写不可更新的视图,INSTEAD-OF触发器必须是行级的.     可以用INSTEAD OF触发器来解释INSERT.UPDATE和DELETE语句,并用备用的程序代码替换那些指令.   一.不可更新视图     基于下列情形创建的视图,不可直接对其进行D