目录
IF语句允许您实现条件分支逻辑。
IF语句有三种风格:
- IF THEN END IF;
- IF THEN ELSE END IF;
- IF THEN ELSIF ELSE END IF;
IF-THEN语句
IF语句的最简单形式由关键字THEN和END IF包围的语句序列的条件。仅当条件为TRUE时,才执行语句序列。如果条件为FALSE或NULL,则IF语句不执行任何操作。
IF-THEN语法的一般格式如下:
IF condition
THEN
... sequence of executable statements ...
END IF;
以下IF条件比较两个不同的数值,如果这两个值之一为NULL,则整个表达式返回NULL。
IF salary > 400
THEN
raise_salary(employee_id,5);
END IF;
我们可以使用IS NULL来测试是否存在NULL:
IF salary > 400 OR salary IS NULL
THEN
raise_salary (employee_id,5);
END IF;
IF-THEN-ELSE语句
IF-THEN-ELSE格式在两个互斥操作之间选择。此IF或IF语句的格式如下:
IF condition
THEN
... TRUE sequence of executable statements ...
ELSE
... FALSE/NULL sequence of executable statements ...
END IF;
下面是IF-THEN-ELSE结构的一个例子。如果工资可能为NULL,您可以使用NVL功能保护自己免受此问题的影响:
IF NVL(salary,0) <= 400
THEN
raise_salary (employee_id, 0);
ELSE
raise_salary (employee_id, 500);
END IF;
嵌套IF
IF语句可以嵌套。您可以在任何其他IF语句中嵌套任何IF语句。以下IF语句显示了几层嵌套:
IF condition1 THEN
IF condition2 THEN
statements2
ELSE
IF condition3 THEN
statements3
ELSIF condition4 THEN
statements4
END IF;
END IF;
END IF;
IF-THEN-ELSIF语句
IF-THEN-ELSIF组合允许我们实现具有许多替代方案的逻辑。这种IF变体的一般格式是:
IF condition-1
THEN
statements-1
ELSIF condition-N
THEN
statements-N
[ELSE
else_statements]
END IF;
要在几个选项之间进行选择,请使用关键字ELSIF来检查其他条件。如果第一个条件为FALSE或NULL,则ELSIF子句测试另一个条件。最后一个ELSE子句是可选的。
DECLARE
grade CHAR(1);
BEGIN
grade := 'A';
IF grade = 'A' THEN
DBMS_OUTPUT.PUT_LINE('Excellent');
ELSIF grade = 'B' THEN
DBMS_OUTPUT.PUT_LINE('Very Good');
ELSIF grade = 'C' THEN
DBMS_OUTPUT.PUT_LINE('Good');
ELSIF grade = 'D' THEN
DBMS_OUTPUT. PUT_LINE('Fair');
ELSIF grade = 'F' THEN
DBMS_OUTPUT.PUT_LINE('Poor');
ELSE
DBMS_OUTPUT.PUT_LINE('No such grade');
END IF;
END;
/
短路评估
PL / SQL使用短路评估。PL / SQL不需要计算IF语句中的所有表达式。例如,在以下IF语句中计算表达式时,如果第一个操作数为FALSE或NULL,PL / SQL将停止计算并立即执行ELSE分支:
IF condition1 AND condition2
THEN
...
ELSE
...
END IF;
如果IF语句中OR操作的第一个操作数为TRUE,PL / SQL立即执行THEN分支:
IF condition1 OR condition2
THEN
...
ELSE
...
END IF;