PL/SQL程序流程控制

PL/SQL程序流程控制

  • 分支结构
  • 循环结构
  • 跳转语句
    分支语句
    根据约定条件的成立与否有选择地执行或跳过相应的程序代码,PL/SQL使用常规的IF语句实现分支结构。
SET SERVEROUTPUT ON;

DECLARE 
    vsal emp.sal%TYPE;
    avg_sal emp.sal%TYPE; 
BEGIN
    SELECT sal INTO vsal FROM emp WHERE empno = 7369;
   dbms_output.put_line(vsal);
    SELECT avg(sal) INTO avg_sal FROM scott.emp;  
   dbms_output.put_line(avg_sal);
--单路分支结构
    IF(vsal < avg_sal) THEN 
        dbms_output.put_line('个人工资未达到部门平均水平');
    END IF;  
    --双路分支结构
    IF(vsal >= 3000) THEN
        dbms_output.put_line('需要缴纳个人所得税');
    ELSE
        dbms_output.put_line('不需缴税');
    END IF;     
    --多路分支结构
    IF(avg_sal >= 4000) THEN
        dbms_output.put_line('部门平均工资过高');
    ELSIF(avg_sal >= 2000) THEN
        dbms_output.put_line('部门平均工资处于中等水平');
    ELSE
        dbms_output.put_line('部门平均工资过低');
    END IF; 
END;

循环结构
用于在约定条件下重复执行特定的代码,PL/SQL支持三种循环类型:

  • 简单循环
  • FOR循环
  • WHILE循环
--简单循环
CREATE TABLE temp_table (num_col NUMBER,char_col VARCHAR2(60));
SET SERVEROUTPUT ON;

DECLARE
    v_Counter NUMBER := 1;
BEGIN
    LOOP
        v_Counter := v_Counter + 1;
        dbms_output.put_line('v_Counter is'|| v_Counter);
        IF v_Counter > 10 THEN
            EXIT;
        END IF;
    END LOOP;
END;
--FOR循环
DECLARE
    n NUMBER(5); 
    total NUMBER(5) :=0;
BEGIN
    FOR i IN 1..100 LOOP
        n := i;
        total := total + i;   
    END LOOP;
    dbms_output.put_line('n= ' || n);  
    dbms_output.put_line('total=' || total); 
END;
--WHILE循环
DECLARE
    i NUMBER(5) :=1; 
    total NUMBER(5) :=0;
BEGIN
    WHILE i<=100 LOOP
        i := i + 1;
        total := total + i;   
    END LOOP;
    dbms_output.put_line('total=' || total); 
END;

使用标签控制循环

PL/SQL支持循环嵌套,且可使用标签进行循环控制。

SET SERVEROUTPUT ON;
DECLARE
BEGIN
    <<outer_loop>>    --标签,用于标记外层循环
    FOR i IN 1..3 LOOP
        dbms_output.put_line('i=' || i);
        <<inner_loop>>    --标签,用于标记内层循环
        FOR j IN 1..3 LOOP
             dbms_output.put_line('j=' || j);
             IF i = 2 THEN
            	  EXIT outer_loop;   --退出外层循环
             END IF;
         END LOOP;   --内层循环结束
    END LOOP;  --外层循环结束
    dbms_output.put_line('嵌套循环全部结束');    
END;

跳转语句
PL/SQL支持使用GOTO语句实现跳转操作

BEGIN	
    FOR i in 1 ..10 LOOP
        dbms_output.put_line('i=' || i);
        IF i=4 THEN
            GOTO end_of_loop;
        END IF;	  
    END LOOP;
    <<end_of_loop>>
    dbms_output.put_line('代码运行结束');        
END ;

你可能感兴趣的:(Orcal数据库)