你的位置:首页 > 数据库

[数据库]PL/SQL编程_流控制


PL/SQL提供了丰富的流控制语句,用来对程序的执行流程进行控制

通过流控制语句,我们可以编写更复杂的PL/SQL块。

流控制语句分为两类,即条件判断语句循环语句

IF语句

IF语句是一种条件判断语句,它根据条件判断的结果执行不同的代码。

最简单的IF语句格式为:

IF 条件 THEN

  代码

END IF;

如果条件成立,就执行指定的代码,否则执行IF语句后面的代码。

如果还要求在条件不成立时执行另外的代码,则可以使用下面的形式:

IF 条件 THEN

  代码1

ELSE

  代码2

END IF;

那么当条件成立时执行代码l ,条件不成立时执行代码2 。
在更复杂的情况下,要先后判断多个条件,这时要用到下面的形式:

IF 条件1 THEN

  代码1

ELSIF 条件2 THEN

  代码2

...

ELSE 

  代码n

END IF;

在执行上面的IF语句时,首先判断条件l 。

当条件l 成立时执行代码l ,否则继续判断条件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;

LOOP语句

LOOP是一种循环语句,它使一部分代码反复执行。

LOOP语句的基本格式为:

LOOP

  循环体

END LOOP;

如果不做特殊处理, LOOP中的代码将无限制地执行。

一般可以用EXIT WHEN或者EXIT语句结束LOOP循环。
EXIT WHEN指定一个条件,当条件满足时退出循环。

EXIT语句使循环结束,一般与IF语句结合使用。
例如,要计算1+2+3+…的值,当和大于500时停止,求正好使
和大于500的最后一个整数,代码如下:

DECLARE
i INTEGER:=0;
total INTEGER:=0;
BEGIN
LOOP
i:=i+1;
total:=total+i;
EXIT WHEN total > 500;
END loop;
dbms_output.put_line(i);
END;

在上述例子中,语句EXIT WHEN total > 500使得当求和结果大于500时停止循环。

这条语句可以用EXIT语句代替,这时需要用IF语句判断和是否大于500:
IF total>500 THEN
EXIT;
END IF;