PL/SQL流程控制-----from-//ddvip.com

 

 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          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。

 

posted on 2005-11-05 13:27 大树 阅读(125) 评论(0)  编辑  收藏


只有注册用户登录后才能发表评论。


网站导航:
 
<2024年5月>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

导航

统计

公告

本期话题
能源行业资产管理咨询
资产管理信息化方案提供
资产管理相关行业培训
大型企业软件体系架构整合
资产管理信息系统实施
信息集成
信息孤岛

常用链接

留言簿(6)

随笔档案(45)

文章档案(7)

新闻档案(1)

相册

wallgate management consulting

最新随笔

搜索

最新评论

阅读排行榜

评论排行榜