3

来源:互联网 发布:c语言socket多线程 编辑:程序博客网 时间:2024/04/25 04:38

第三章  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 <条件语句>       /*条件满足,退出循环语句*/

END LOOP;

 

3.

DECLARE

    int NUMBER(2) :=0;

BEGIN

   LOOP

      int := int + 1;

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

      EXIT WHEN int =10;

   END LOOP;

END;

 

2.  WHILE 循环

 

WHILE <布尔表达式> LOOP

    要执行的语句;

END LOOP;

 

4.

DECLARE

x NUMBER :=1;

BEGIN

   WHILE x<=10 LOOP

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

              x:= x+1;

   END LOOP;

END;

 

3.  数字式循环

 

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

  要执行的语句;

END LOOP;

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

 

5.

BEGIN

   FOR int  in 1..10 LOOP

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

   END LOOP;

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 .. 25 LOOP

      INSERT INTO temp_table (num_col ) VALUES ( v_counter );

   END LOOP;

   INSERT INTO temp_table(num_col) VALUES (v_counter );

   FOR v_counter IN REVERSE 20 .. 25 LOOP

      INSERT INTO temp_table (num_col ) VALUES ( v_counter );

   END LOOP;

END ;

 

DROP TABLE temp_table;

§3.3  标号和GOTO

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

 

GOTO   label;

 . . .  . . .

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

   END LOOP;

 <<l_ENDofLOOP>>

     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;

<<print1>>

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

END;

原创粉丝点击