3.3 PL/SQL中的流控制

PL/SQL提供了丰富的流控制语句,用来对程序的执行流程进行控制。通过流控制语句,我们可以编写更复杂的PL/SQL块。流控制语句分为两类,即条件判断语句和循环语句。

3.3.1 IF语句

IF语句是一种条件判断语句,它根据条件判断的结果执行不同的代码。最简单的IF语句格式为:


IF 条件 THEN

代码

END IF


如果条件成立,就执行指定的代码,否则执行IF语句后面的代码。如果还要求在条件不成立时执行另外的代码,则可以使用下面的形式:


IF 条件 THEN

代码1

ELSE

代码2

END IF


那么当条件成立时执行代码1,条件不成立时执行代码2。

在更复杂的情况下,要先后判断多个条件,这时要用到下面的形式:


IF 条件1 THEN

代码1

ELSIF条件2

代码2

……

ELSE

代码n

END IF


在执行上面的IF语句时,首先判断条件1。当条件1成立时执行代码1,否则继续判断条件2,如果成立则执行代码2,否则继续判断下面的条件。如果前面的条件都不成立,则执行ELSE后面的代码n。

上面提到的IF形式每次只进行一个条件的判断,如果这个条件成立,则执行相应的代码,否则继续判断下面的条件。有时候需要一次判断多个条件,根据多个条件的综合情况执行相应的代码,这就要用到条件的联合。

条件的联合有“与”和“或”两种形式。“与”运算通过AND运算符连接多个条件,只有当所有条件都成立时,整个条件判断才算成立。如果有一个条件不成立,则整个条件判断不成立。“与”运算的格式为:


条件1 AND 条件2 AND 条件3……


例如,要计算1+2+3+……+100的值,当和大于500时停止,求正好使和大于500的最后一个整数。这时可以构造两个条件,其中一个条件要求求和的数据小于等于100,另一个条件要求求和的结果小于等于500,只要这两个条件同时满足,就可以继续求和。只要其中一个条件不满足,则求和停止。用于求和的PL/SQL块的代码如下所示。在块中用到了LOOP循环。


DECLARE

i INTEGER:=0;

total INTEGER:=0;

BEGIN

LOOP

IF i<=100 and total<=500 THEN—如果两个条件同时满足,则继续循环

i:=i+1;

total:=total+i;

ELSE—只要有一个条件不满足,则退出循环,计算结束

EXIT;

END IF;

END LOOP;

dbms_output.put_line(i);

END;