Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2967458
  • 博文数量: 412
  • 博客积分: 3010
  • 博客等级: 中校
  • 技术积分: 7374
  • 用 户 组: 普通用户
  • 注册时间: 2009-04-25 15:15
个人简介

学习是一种信仰。

文章分类

全部博文(412)

文章存档

2014年(108)

2013年(250)

2010年(11)

2009年(43)

我的朋友

分类: Oracle

2013-10-28 19:00:55

第三章  PL/SQL流程控制语句

 

介绍PL/SQL的流程控制语句, 包括如下三类:

l  控制语句: IF 语句

l  循环语句: LOOP语句, EXIT语句

l  顺序语句: GOTO语句, NULL语句

§3.1   条件语句

IF <布尔表达式> THEN

PL/SQL 和 SQL语句

END IF;

 

IF <布尔表达式> THEN

PL/SQL 和 SQL语句

ELSE

其它语句

END IF;

 

IF <布尔表达式> THEN

PL/SQL 和 SQL语句

ELSIF < 其它布尔表达式> THEN

其它语句

ELSIF < 其它布尔表达式> THEN

其它语句

ELSE

其它语句

END IF;

 

提示: ELSIF 不能写成 ELSEIF

 

1:

DECLARE

    v_empno emp.empno%TYPE :=&empno;

    V_salary emp.sal%TYPE;

    V_comment VARCHAR2(35);

BEGIN

   SELECT sal INTO v_salary FROM emp WHERE empno=v_empno;

   IF v_salary<1500 THEN

       V_comment:= ‘Fairly less’;

   ELSIF v_salary <3000 THEN

      V_comment:= ‘A little more’;

   ELSE

      V_comment:= ‘Lots of salary’;

   END IF;

   DBMS_OUTPUT.PUT_LINE(V_comment);

END;

 

§3.2   CASE 表达式

CASE selector

       WHEN expression1 THEN result1

       WHEN expression2 THEN result2

 

       WHEN expressionN THEN resultN

       [ ELSE resultN+1]

END;

 

2:

 

DECLARE

       V_grade char(1) := UPPER(‘&p_grade’);

       V_appraisal VARCHAR2(20);

BEGIN

       V_appraisal :=

       CASE v_grade

              WHEN ‘A’ THEN ‘Excellent’

              WHEN ‘B’ THEN ‘Very Good’

              WHEN ‘C’ THEN ‘Good’

              ELSE ‘No such grade’

       END;

       DBMS_OUTPUT.PUT_LINE(‘Grade:‘||v_grade||’  Appraisal: ‘|| v_appraisal);

END;

 

 

§3.3   循环

 1.  简单循环

LOOP

      要执行的语句;

      EXIT WHEN <条件语句>       /*条件满足,退出循环语句*/

ENDLOOP;

 

3.

DECLARE

    int NUMBER(2) :=0;

BEGIN

  LOOP

      int := int + 1;

      DBMS_OUTPUT.PUT_LINE('int 的当前值为:'||int);

      EXIT WHEN int =10;

   ENDLOOP;

END;

 

2.  WHILE 循环

 

WHILE <布尔表达式> LOOP

    要执行的语句;

ENDLOOP;

 

4.

DECLARE

x NUMBER :=1;

BEGIN

   WHILE x<=10 LOOP

      DBMS_OUTPUT.PUT_LINE('X的当前值为:'||x);

       x:= x+1;

   ENDLOOP;

END;

 

3.  数字式循环

 

FOR 循环计数器 IN [ REVERSE ] 下限 .. 上限 LOOP

  要执行的语句;

ENDLOOP;

每循环一次,循环变量自动加1;使用关键字REVERSE,循环变量自动减1。跟在IN REVERSE 后面的数字必须是从小到大的顺序,而且必须是整数,不能是变量或表达式。可以使用EXIT 退出循环。

 

5.

BEGIN

   FOR int  in 1..10 LOOP

       DBMS_OUTPUT.PUT_LINE('int 的当前值为: '||int);

   ENDLOOP;

END;

 

6.

CREATE TABLE temp_table(num_col NUMBER);

 

DECLARE

V_counter NUMBER := 10;

BEGIN

   INSERT INTO temp_table(num_col) VALUES (v_counter );

   FOR v_counter IN 20 .. 25LOOP

      INSERT INTO temp_table (num_col ) VALUES ( v_counter );

   ENDLOOP;

   INSERT INTO temp_table(num_col) VALUES (v_counter );

   FOR v_counter IN REVERSE 20 .. 25LOOP

      INSERT INTO temp_table (num_col ) VALUES ( v_counter );

   ENDLOOP;

END ;

 

DROP TABLE temp_table;

§3.3  标号和GOTO

PL/SQL中GOTO语句是无条件跳转到指定的标号去的意思。语法如下:

 

GOTO   label;

 . . .  . . .

<

 

7:

DECLARE

   V_counter NUMBER := 1;

BEGIN

  LOOP

     DBMS_OUTPUT.PUT_LINE('V_counter的当前值为:'||V_counter);

 V_counter := v_counter + 1;

 IF v_counter > 10 THEN

     GOTO l_ENDofLOOP;

 END IF;

   ENDLOOP;

 <>

     DBMS_OUTPUT.PUT_LINE('V_counter的当前值为:'||V_counter);

END ;

§3.4  NULL 语句

在PL/SQL 程序中,可以用 null 语句来说明“不用做任何事情”的意思,相当于一个占位符,可以使某些语句变得有意义,提高程序的可读性。如:

DECLARE

. . .

BEGIN

IF v_num IS NULL THEN

GOTO print1;

END IF;

<>

NULL;  -- 不需要处理任何数据。

END;

 


阅读(761) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~