官术网_书友最值得收藏!

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
主站蜘蛛池模板: 章丘市| 屏东市| 兰考县| 当涂县| 肥东县| 忻城县| 楚雄市| 和平县| 信阳市| 彭山县| 隆林| 绥江县| 班玛县| 浑源县| 平遥县| 策勒县| 冕宁县| 天门市| 多伦县| 揭西县| 博爱县| 海安县| 阿巴嘎旗| 新化县| 苍南县| 浪卡子县| 英吉沙县| 龙山县| 沙湾县| 贵溪市| 长寿区| 卢龙县| 绥江县| 康马县| 墨竹工卡县| 延津县| 夹江县| 四平市| 深圳市| 洪湖市| 隆子县|