zoukankan      html  css  js  c++  java
  • PL/SQL程序设计 第三章 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;
     
    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;
     
     
     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;
    BEGIN
       x:= 1;
       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/SQL中GOTO语句是无条件跳转到指定的标号去的意思。语法如下:
     
    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 ;
    在PL/SQL 程序中,可以用 null 语句来说明“不用做任何事情”的意思,相当于一个占位符,可以使某些语句变得有意义,提高程序的可读性。如:
    DECLARE
    . . .
    BEGIN
    IF v_num IS NULL THEN
    GOTO print1;
    END IF;
    <<print1>>
    NULL; -- 不需要处理任何数据。
    END;
  • 相关阅读:
    Ubuntu14.04安装和配置Tomcat8.0.12
    订单、支付、退款、发货、退货等编号自动生成类
    java实现给图片添加水印
    跳一次涨薪88% 跳槽已成为中国“职场文化”
    五色使人目盲
    CSS样式如何解决IE浏览器不同版本的兼容问题
    MySQL日期时间函数大全
    MySQL DATE_ADD() 函数
    input text框和 checkbox 连带被选中的情况
    jquery easyui from 表单返回乱码!
  • 原文地址:https://www.cnblogs.com/JSD1207ZX/p/9386365.html
Copyright © 2011-2022 走看看