- Oracle從新手到高手
- 楊繼萍
- 1101字
- 2019-12-09 14:49:10
6.2 條件語句
PL/SQL與其他的編程語言一樣,都具有條件判斷語句,條件判斷語句的主要作用是根據條件的變化選擇執行不同的代碼。
6.2.1 IF…THEN條件語句
在PL/SQL中為了控制程序的執行方向,引進了IF語句。最簡單的IF語句就是IF…THEN語句,其語法形式如下:
if <expression1> then pl/sql_statement; end if;
在該語句中,如果判斷條件EXPRESSION1為TRUE,則會執行IF下面的PL/SQL語句。如果判斷條件EXPRESSION1為FALSE,則跳過IF下面的語句直接執行END IF后面的語句。
下面的示例使用IF…END IF語句判斷兩個數值的大小。

在上面的程序中,由于變量NUMBER1的值大于NUMBER2的值,判斷條件將返回TRUE,因此將執行IF內的PL/SQL語句。
dbms_output.put_line(number1 ||'>='||number2);
6.2.2 IF…THEN…ELSE條件語句
IF語句的另一種形式就是與ELSE語句結合使用,形成IF…THEN…ELSE語句。該語句的語法形式如下。
if <expression1> then pl/sql_statement1; else pl/sql_statement2; end if;
在IF…THEN…ELSE語句中,如果判斷條件EXPRESSION1為TRUE,則首先執行IF下面的PL/SQL語句,當語句執行完后將直接跳到END IF語句后,并不會執行ELSE下面的PL/SQL語句。如果判斷條件EXPRESSION1為FALSE時,則會執行ELSE下面的PL/SQL語句。
在下面的示例將判斷兩個整數變量的大小,輸出不同的結果。

6.2.3 IF…THEN…ELSIF條件語句
IF…THEN…ELSIF語句實現了IF語句的嵌套,從而實現了判定兩個以上的判斷條件。該語句的語法形式如下。

在該語句中由于使用了ELSIF語句,語句中的判斷條件將依次被評估,直到一個判斷條件為TRUE,則執行該語句下的代碼;如果所有的ELSEIF判斷條件都為FALSE,則執行ELSE下面的PL/SQL語句。
下面的示例將判斷某一年是否為閏年,閏年的判斷條件為:年份能被4整除但不能被100整除,或者能被400整除。

提示:
注意關鍵字ELSIF不能寫成ELSEIF。
6.2.4 CASE條件語句
從Oracle 9i以后,在PL/SQL中也可以像其他的編程語言一樣使用CASE語句了,CASE語句的執行方式與IF語句相似。通常情況下,CASE語句從關鍵字CASE開始,后面跟著一個選擇器,它通常是一個變量。接下來是WHEN子句,它將根據選擇器的值執行不同的PL/SQL語句。
CASE語句共有兩種形式。第一種形式是獲取一個選擇器值,然后將其與每個WHEN子句進行比較。其語法形式如下:

另一種形式是不使用選擇器,而是判斷每個WHEN子句中的條件。這種CASE語句的語法結構如下:

雖然CASE語句的作用與IF…ELSIF…ELSE…END IF語句相同,都可以實現多項選擇,但是CASE語句可以以一種更簡潔的表示法實現該功能。當執行CASE語句時,系統將根據選擇器的值查找與此相匹配的WHEN常量,當找到一個匹配的WHEN常量時,就會執行與該WHEN常量相關的子句。如果沒有與選擇器相匹配的WHEN常量,那么就執行ELSE子句。
下面的示例演示了CASE語句的使用方法。

執行上面的程序塊時,一共會執行5次循環,并且每次循環都是在查找與I匹配的WHEN常量。當選擇器I大于2時,沒有與之匹配的WHEN語句,因此會執行ELSE語句。
雖然在CASE語句中可以省略ELSE子句,但是當WHEN子句中的常量沒有與選擇器匹配的值時,則該CASE語句將引發一個如下的Oracle錯誤。
ORA-06592: 執行 CASE 語句時未找到 CASE ORA-06512: 在line 5
- 算法基礎:打開程序設計之門
- Python Deep Learning
- 深入淺出RxJS
- Rust Essentials(Second Edition)
- Cocos2d-x學習筆記:完全掌握Lua API與游戲項目開發 (未來書庫)
- ArcGIS for Desktop Cookbook
- BeagleBone Robotic Projects(Second Edition)
- Web程序設計:ASP.NET(第2版)
- LabVIEW數據采集
- Learning C++ by Creating Games with UE4
- Responsive Web Design with jQuery
- Natural Language Processing with Python Cookbook
- Neo4j權威指南 (圖數據庫技術叢書)
- 語義Web編程
- Learning Network Programming with Java