PL/SQL 支持不同方式的条件判断,主要分为2大类:
- IF
- CASE
#IF
##IF-THEN
condition求值为TRUE,sequence_of_statements将会执行。
IF condition THEN
sequence_of_statements;
END IF;
##IF-THEN-ELSE
condition求值为TRUE,sequence_of_if_statements将会执行,否则执行sequence_of_else_statements。
IF condition THEN
sequence_of_if_statements;
ELSE
sequence_of_else_statements;
END IF;
##IF-THEN-ELSEIF
condition1求值为TRUE,sequence_of_if_statements1将会执行,否则如果condition2求值为TRUE,sequence_of_statements2将会执行,否则执行sequence_of_statements3。
IF condition1 THEN
sequence_of_statements1
ELSIF condition2 THEN
sequence_of_statements2
ELSE
sequence_of_statements3
END IF;
最后的 ELSE
为可选的,在IF结构内可以有任意多个ELSEIF
, 如果ELSEIF
过多,可考虑使用支持搜索的CASE
语句。
#CASE
CASE语句可以实现和IF语句一样的效果,有两种CASE语句类型:
- 简单CASE语句
- 支持搜索的CASE 语句
除了CASE语言外,还有实现条件分支的CASE表达式。
##简单CASE语句
求值表达式expression
得到的结果一次和WHEN
中的result1
, result2
, …匹配,如果一致则执行对应的语句statements
, 否则执行statements_else
。
CASE expression
WHEN result1 THEN
statements1
WHEN result2 THEN
statements2
...
ELSE
statements_else
END CASE;
ELSE
部分是可选的,如果没有ELSE
,同时没有任何WHEN
成功匹配,则会抛出错误“CASE_NOT_FOUND”,同样的情况在IF
里面则是简单的离开IF
。
expression
可以除BLOB
, BFILE
和复合类型之外的任意类型。
##支持搜索的CASE 语句
依次求值一系列表达式expression
,当找到第一个求值为TRUE
的表达式时,对应的语句statements
被执行。
CASE
WHEN expression1 THEN
statements1
WHEN expression2 THEN
statements2
...
ELSE
statements_else
END CASE;
同样的,ELSE
为可选部分,在没有匹配发生的时候,也是产生错误“CASE_NOT_FOUND”。
##CASE表达式
依次求值一系列表达式condition_expression
,当找到第一个求值为TRUE
的表达式时,对应的结果表达式result_expression
被求值作为CASE表达式的求值结果返回。
CASE
WHEN condition_expression1
THEN result_expression1
WHEN condition_expression2
THEN result_expression2
...
ELSE result_expression_else
END
CASE表达式时表达式,不是语句,直接以END
结尾, 而不是END CASE;
。ELSE
同CASE语句一样为可选部分,但是与CASE语句不同,如果没有ELSE
,同时没有任何WHEN
成功匹配,并不会有错误产生,而是CASE表达式被求值为NULL
。