一、流程控制
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 selector
WHEN expression1 THEN result1
WHEN expression2 THEN result2
WHEN 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_statements
END 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;
----------------------------------------------------
<<label>> /*标号是用<< >>括起来的标识符 */
4.空处理NULL
BEGIN
…
IF v_num IS NULL THEN
GOTO print1;
END IF;
…
<<print1>>
NULL; -- 不需要处理任何数据。
END;