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;