一、流程控制
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!
示例:
DECLARE V_sal employees.salary%type;BEGIN SELECT salary INTO V_sal FROM employees WHERE employee_id = 100; IF V_sal > 10000 THEN dbms_output.put_line('工资大于1万'); ELSIF V_sal > 5000 THEN dbms_output.put_line('工资大于5千'); ELSE dbms_output.put_line('工资小于5千'); END IF;END;
CASE表达式:
CASE selectorWHEN expression1 THEN result1WHEN expression2 THEN result2WHEN expressionN THEN resultN[ ELSE resultN+1]END;
2.循环
基本循环
LOOP Sequence of statements;END LOOP;
也可以使用EXIT WHEN进行退出:
LOOP stmt; exit WHEN x > 50; END LOOP;
示例:
--包含初始化条件、循环体、循环条件、迭代条件DECLARE v_i NUMBER(3) := 1;BEGIN LOOP dbms_output.put_line(v_i); -- v_i = v_i + 1; EXIT WHEN v_i >= 10; v_i := v_i + 1; END LOOP;END;
WHILE循环
WHILE condition LOOP sequence_of_statementsEND LOOP;
示例:
--包含初始化条件、循环体、循环条件、迭代条件DECLARE v_i NUMBER(3) := 1;BEGIN WHILE v_i <= 10 LOOP dbms_output.put_line(v_i); v_i := v_i + 1; END LOOP;END;
FOR循环
FOR 循环计数器 IN [ REVERSE ] 下限 .. 上限 LOOP要执行的语句;END LOOP;
示例:
--包含初始化条件、循环体、循环条件、迭代条件DECLARE BEGIN FOR c IN 1..10 LOOP --c会自动++ dbms_output.put_line(c); END LOOP;END;
3.GOTO
PL/SQL 中 GOTO 语句是无条件跳转到指定的标号去的意思。语法如下:GOTO label;----------------------------------------------------<
4.空处理NULL
BEGIN…IF v_num IS NULL THENGOTO print1;END IF;…<>NULL; -- 不需要处理任何数据。END;