PL/SQL 條件判斷
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
。