ORACLE PL/SQL 實例精解之第五章 條件控制:CASE語句


5.1 CASE語句

1. CASE語句具有如下結構

CASE SELECTOR

  WHEN EXPRESSION 1 THEN STATEMENT 1;

  WHEN EXPRESSSION 2 THEN STATEMENT 2;

  ........

  WHEN EXPRESSION N THEN STATEMENT N;

  ELSE STATEMENT N+1;

 END CASE;

保留字CASE標識CASE語句的開始。選擇器決定哪個WHEN子句應該被執行。每個WHEN子句都包含一個EXPRESSION以及與之關聯的一個或者多個可執行語句。ELSE子句是可選的。他的工作方式非常類似於IF-THEN-ELSE語句中所使用的ELSE子句。END CASE是標識CASE語句結束的保留字。注意,選擇器只會計算一次。並且會順序計算WHEN的子句。表達式的值與選擇器的值進行比較。如果兩種值相等。那么與特定WHEN子句相關的語句會執行,並且隨后的WHEN的子句不會計算。如果任何表達式都不匹配選擇器的值,則ELSE子句會被選中和執行。

2. 搜索式CASE語句

搜索式CASE語句有個能夠產生boolean(true,false,null)的搜索條件,當特定搜索條件計算結果為TRUE時,會執行與該條件相關的語句組合。搜索式CASE語句的語法如下所示:

CASE

  WHEN SEARCH CONDIDTION 1 THEN STATEMENT 1;

  WHEN SEARCH CONDIDTION2 THEN STATEMENT 2;

  ........

  WHEN SEARCH CONDIDTIONN THEN STATEMENT N;

  ELSE STATEMENT N+1;

 END CASE;

當搜索條件的計算結果為TRUE時,執行控制權傳遞與之相關的語句。如果任何搜索條件都不會產生TRUE,則會執行與ELSE子句相關的語句。請注意,ELSE子句是可選的。

3. CASE語句和搜索式CASE語句之間的差別

搜索式的CASE語句沒有選擇器(可以這么說,因為它產生的是BOOLEN類型的搜索條件,那我們就給他一個函數表達式例如MOD(V_NUM,2)=0判斷是TRUE FALSE OR NULL,而CASE語句需要把選擇器傳入,解釋:(V_MUM_FLAG := MOD(V_NUM,2),所以你要在CASE 后面添加V_MUM_FLAG這個選擇器 然后判斷選擇器0(when 0 THEN)

CASE語句

CASE V_MUM_FLAG

  WHEN 0 THEN

    STATEMEN

搜索式CASE語句

CASE

  WHEN MOD(V_NUM,2)=0 THEN

  STATEMEN.

5.2 CASE表達式

CASE表達式會返回一個值,這個值會接着被賦予一個變量。是使用復制操作符:=實現的

5.3 NULLIF和COALESCE函數

1. NULLIF函數

NULLIF函數會比較兩個表達式。如果兩者相同,函數會返回NULL,否則的話,返回第一個表達式的值。

NULLIF結構:

NULLIF(expression1, expression2)

如果expression1 等於 expression2,則NULLIF返回NULL.如果expression1 不等於 expresson2,NULLIF函數返回expression1.注意 NULLIF函數的作用與NVL函數相反。NVL如果第一個表達式是NULL,NVL函數返回第二個表達式。如果第一個表達式不是NULL.NVL返回第一個表達式

NULLIF函數等價於如下CASE表達式

CASE

  WHEN EXPRESSION1 = EXPRESSION2 THEN NULL

  ELSE EXPRESSION1

END

NULLIF函數存在一個限制:不能把字面值NULL賦予EXPRESSION1,

2. COALESCE[,kəʊə'les]函數

COALESCE的函數會把表達式列表中每一個表達式與NULL比較,並且返回第一個非NULL表達式的值。COALESCE函數具有如下結構

COALESCE(expression1,expression2,.........,expressionN)

如果expression1等於NULL,會計算expressioin2.如果expression2的計算結果部位NULL,這個函數會返回expression2,如果所有表達式的結果都是NULL,則這個函數返回NULL.

5.3.1 NULLIF函數

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM