zoukankan      html  css  js  c++  java
  • oracle数据库系列(6)——PL/SQL 流程控制语句

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

    1、控制语句: IF 语句

    2、循环语句: LOOP 语句, EXIT 语句

    3、顺序语句: GOTO 语句, NULL 语句

    一、 条件语句

    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; 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 表达式

    CASE selector
    WHEN expression1 THEN result1
    WHEN expression2 THEN result2
    WHEN expressionN THEN resultN
    [ ELSE resultN+1]
    END; 
    DECLARE
    V_grade char(1) ;
    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 循环(相较 1,推荐使用 2)

    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 ;

    三、标号和 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 ;

    四、NULL 语句

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

    DECLARE
    . . .
    BEGINIF v_num IS NULL THEN
    GOTO print1;
    END IF;
    …
    
    <<print1>>
    NULL;  -- 不需要处理任何数据。
    END;
    
  • 相关阅读:
    倒序数组的算法
    SQL 日期操作函数
    sp_executesql 练习
    c#编译器对byte类型的一些规则
    角度在excel中如何输入并使其能计算
    5天学会fx5800计算器测量编程(二) fx5800函数学习
    5天学会fx5800计算器测量编程(二) fx5800语法学习
    如何快速的将大地坐标系导入进施工结构的cad平面图纸中
    CAD中批量导入坐标和点号的方法命令
    5天学会fx5800计算器测量编程(一)
  • 原文地址:https://www.cnblogs.com/wyh19941210/p/7740108.html
Copyright © 2011-2022 走看看