PL/SQL程序中的流程控制语句借鉴了许多高级语言的流程控制思想,但又有自己的特点。
条件控制
下面通过实例介绍条件控制语句的使用。
1. if..then..end if条件控制
采用if..then..end if条件控制的语法结构如图9.15所示。
在【SQLPlus Worksheet】中执行下列PL/SQL程序,该程序判断两个整数变量的大小。 执行结果如图9.16所示。
―――――――――――――――――――――――――――――――――――――
set serveroutput on
declare
number1 integer:=90;
number2 integer:=60;
begin
if number1>=number2 then
dbms_output.put_line(number1大于等于number2);
end if;
end;
―――――――――――――――――――――――――――――――――――――
【配套程序位置】:第9章\ conditioncontrol1.sql。
2. if..then..else..end if条件控制
采用if..then..else..end if条件控制的语法结构如图9.17所示。
在【SQLPlus Worksheet】中执行下列PL/SQL程序,该程序判断两个整数变量的大小,输出不同的结果。执行结果如图9.18所示。
―――――――――――――――――――――――――――――――――――――
set serveroutput on
declare
number1 integer:=80;
number2 integer:=90;
begin
if number1>=number2 then
dbms_output.put_line(number1大于等于number2);
else
dbms_output.put_line(number1小于number2);
end if;
end;
―――――――――――――――――――――――――――――――――――――
【配套程序位置】:第9章\ conditioncontrol2.sql。
3. if嵌套条件控制
采用if嵌套条件控制的语法结构如图9.19所示。
在【SQLPlus Worksheet】中执行下列PL/SQL程序,该程序判断两个整数变量的大小,输出不同的结果。
执行结果如图9.20所示。
―――――――――――――――――――――――――――――――――――――
set serveroutput on
declare
number1 integer:=80;
number2 integer:=90;
begin
if number1<=number2 then
if number1=number2 then
dbms_output.put_line(number1等于number2);
else
dbms_output.put_line(number1小于number2);
end if;
else
dbms_output.put_line(number1大于number2);
end if;
end;
―――――――――――――――――――――――――――――――――――――
【配套程序位置】:第9章\ conditioncontrol3.sql。
循环控制
循环结构是按照一定逻辑条件执行一组命令,PL/SQL中有4种基本循环结构,在它们基础上又可以演变出许多嵌套循环控制,这里介绍最基本的循环控制语句。
1. loop..exit..end loop循环控制
采用loop..exit..end loop循环控制的语法结构如图9.21所示。
在【SQLPlus Worksheet】中执行下列PL/SQL程序,该程序将number1变量每次加1,一直到等于number2为止,统计输出循环次数。
―――――――――――――――――――――――――――――――――――――
set serveroutput on
declare
number1 integer:=80;
number2 integer:=90;
i integer:=0;
begin
loop
number1:=number1+1;
if number1=number2 then
exit;
else
i:=i+1;
end if;
end loop;
dbms_output.put_line(共循环次数:||to_char(i));
end;
―――――――――――――――――――――――――――――――――――――
执行结果如图9.22所示。
【配套程序位置】:第9章\loopcontrol1.sql。
2. loop..exit..when..end loop循环控制
采用loop..exit..when..end loop循环控制的语法结构与图9.21所示结构类似。
exit when实际上就相当于
if 条件 then
exit;
end if;
在【SQLPlus Worksheet】中执行下列PL/SQL程序,该程序将number1变量每次加1,一直到等于number2为止,统计输出循环次数。
―――――――――――――――――――――――――――――――――――――
set serveroutput on
declare
number1 integer:=80;
number2 integer:=90;
i integer:=0;
begin
loop
number1:=number1+1;
i:=i+1;
exit when number1=number2;
end loop;
dbms_output.put_line(共循环次数:||to_char(i));
end;
―――――――――――――――――――――――――――――――――――――
执行结果如图9.23所示。
【配套程序位置】:第9章\loopcontrol2.sql。
when循环控制结束条件比采用if的条件控制结束循环次数多1次。
3. while..loop..end loop循环控制
采用loop..exit..when..end loop循环控制的语法如下。
while 条件 loop
执行语句段;
end loop;
在【SQLPlus Worksheet】中执行下列PL/SQL程序,该程序将number1变量每次加1,一直到等于number2为止,统计输出循环次数。
―――――――――――――――――――――――――――――――――――――
set serveroutput on
declare
number1 integer:=80;
number2 integer:=90;
i integer:=0;
begin
while number1<number2 loop
number1:=number1+1;
i:=i+1;
end loop;
dbms_output.put_line(共循环次数:||to_char(i));
end;
―――――――――――――――――――――――――――――――――――――
执行结果如图9.24所示。
【配套程序位置】:第9章\whilecontrol.sql。
4. for..in..loop..end循环控制
采用for..in..loop..end循环控制的语法如下。
for 循环变量 in [reverse] 循环下界..循环上界 loop
循环处理语句段;
end loop;
在【SQLPlus Worksheet】中执行下列PL/SQL程序,该程序通过循环变量I来控制number1增加次数,输出结果。执行结果如图9.25所示。
―――――――――――――――――――――――――――――――――――――
set serveroutput on
declare
number1 integer:=80;
number2 integer:=90;
i integer:=0;
begin
for i in 1..10 loop
number1:=number1+1;
end loop;
dbms_output.put_line(number1的值:||to_char(number1));
end;
―――――――――――――――――――――――――――――――――――――
【配套程序位置】:第9章\forcontrol.sql。