1. 程式人生 > >PL/SQL 條件判斷

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 中的result1result2, …匹配,如果一致則執行對應的語句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