本文主要目的在于让读者了解PL/SQL中的流程控制语句,并能快速的应用在日常工作中。
在使用流程控制语句之前,可以先问问自己,要用选择还是循环,选择的话有几种判断几种选择,循环的话看有没有限制循环次数以及是先循环再判断还是先判断再循环。无论是选择语句还是循环语句都需要判断,选择语句的判断是如何选,循环语句的判断是是否循环。
PL/SQL中的流程控制语句分为两大类:
- 选择语句
- 循环语句
选择语句4种
- if…then…end if;【1种判断1种选择】【做与不做】
-- 比较两个字符串的长度
set serveroutput on
declare
a varchar2(10):='ALEN';
b varchar2(10):='BLENGTH';
begin
if length(a)<length(b) then
dbms_output.put_line('a的长度比b短');
end if;
end;
/
- if…then…else…end if;【1种判断2种选择】【做这个还是做另一个】
-- 比较两个字符串的长度
set serveroutput on
declare
a varchar2(10):='ALEN';
b varchar2(10):='BLENGTH';
begin
if length(a)<length(b) then
dbms_output.put_line('a的长度比b短');
else
dbms_output.put_line('a的长度不比b短');
end if;
end;
/
- if…then…elsif…then…else…end if;【多种判断多种选择】【做哪一个】
-- 比较两个字符串的长度
set serveroutput on
declare
a varchar2(10):='ALEN';
b varchar2(10):='BLENGTH';
begin
if length(a)<length(b) then
dbms_output.put_line('a的长度比b短');
elsif length(a)>length(b) then
dbms_output.put_line('a的长度比b长');
else
dbms_output.put_line('a的长度和b一样长');
end if;
end;
/
- case…when…then…when…then…else…end case;【至少2种选择的判断,选择器判断,1则执行语句1,2则执行语句2,…,n则执行语句n,都不满足则执行语句n+1】【多选择的判断建议使用case】
set serveroutput on
declare
i int:=2;
begin
case i
when 1 then
dbms_output.put_line('现在是春季!');
when 2 then
dbms_output.put_line('现在是夏季!');
when 3 then
dbms_output.put_line('现在是秋季!');
when 4 then
dbms_output.put_line('现在是冬季!');
else
dbms_output.put_line('输入数字有错,请重新输入');
end case;
end;
/
循环(loop)语句3种
- loop…exit when … end loop;【先循环,后判断,至少循环1次】
-- 求前100个自然数的和
set serveroutput on
declare
n_sum int:=0;
n int:=0;
begin
loop
n:=n+1;
n_sum:=n_sum+n;
exit when n=100;
end loop;
dbms_output.put_line('前100个自然数的和为'||n_sum);
end;
/
- while…loop…end loop;【先判断,再循环,可能循环0次】
-- 求前100个自然数的和
set serveroutput on
declare
n_sum int:=0;
n int:=1;
begin
while n<=100 loop
n_sum:=n_sum+n;
n:=n+1;
end loop;
dbms_output.put_line('前100个自然数的和为'||n_sum);
end;
/
- for x in 1…n l… end loop;【先判断,再循环,限定循环次数】
-- 求前100个自然数的和
set serveroutput on
declare
n_sum int:=0;
n int:=1;
begin
for n in 1..100 loop
n_sum:=n_sum+n;
end loop;
dbms_output.put_line('前100个自然数的和为'||n_sum);
end;
/