Oracle从新手到高手
上QQ阅读APP看书,第一时间看更新

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