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函數