1.PL/SQL顺序结构
顺序结构中我们经常使用goto的关键字进行程序的跳转(不在非不得已的情况下,不要使用)
declare
ls_stuinfo stuinfo%rowtype;
xsjbxx varchar2(50);
begin
select t.* into ls_stuinfo
from stuinfo t
where t.stuid='SC201801006';
xsjbxx:='姓名:' ||ls_stuinfo.stuname || ' 学号:' ||ls_stuinfo.stuid || ' 年龄:' ||ls_stuinfo.age;
dbms_output.put_line(xsjbxx);
if ls_stuinfo.age>25 then
goto flag1;
else
goto flag2;
end if;
<<flag1>>
dbms_output.put_line(xsjbxx||' 年龄大于25岁');
<< flag2>>
null;
exception
when no_data_found then
dbms_output.put_line('该学生在学生信息表中找不到');
end;
2.PL/SQL条件控制
2.1 if-then-end if
语法结构:
if 条件 then
---满足条件执行体;
end if;
案例:询学生信息表(stuinfo)中男生的数量
declare
ls_stuinfo stuinfo%rowtype;--学生信息表
ls_number number:=0;--计数器
begin
--对学生信息表进行全表循环
for ls_stuinfo in ( select t.* from stuinfo t ) loop
if ls_stuinfo.sex='1' then--性别编码为1的是男生
ls_number:=ls_number+1;--计数器加1
end if;
end loop;
dbms_output.put_line('男生的数量是:'||ls_number);
end;
2.2 if-then-else-end if
语法结构:
if 条件 then
---满足条件执行体;
else
---满足条件执行体;
end if;
案例:分别计算学生信息表中男生和女生的数量各多少
declare
ls_stuinfo stuinfo%rowtype;--学生信息表
ls_number_boy number:=0;--男生计数器
ls_number_girl number:=0;--女生计算器
begin
--对学生信息表进行全表循环
for ls_stuinfo in ( select t.* from stuinfo t ) loop
if ls_stuinfo.sex='1' then--性别编码为1的是男生
ls_number_boy:=ls_number_boy+1;--计数器加1
else
--性别编码为2(不为1)的是女生
ls_number_girl:=ls_number_girl+1;--计数器加1
end if;
end loop;
dbms_output.put_line('男生的数量是:'||ls_number_boy||',女生的数量是:'|| ls_number_girl);
end;
2.3 if-then-elsif-then-end if
语法结构:
if 条件1 then
--条件1成立执行体;
elsif 条件2 then
---条件1不成立,条件而成立执行体;
else
---条件都不成立执行体;
end if;
2.4 case...when...then
CASE 是一种选择结构的控制语句,可以根据条件从多个执行分支中选择相应的执行动作。也可以作为表达式使用,返回一个值。
语法结构
CASE 选择体
WHEN 表达式1 then 执行体;
WHEN 表达式2 then 执行体;
WHEN 表达式3 then 执行体;
...
ELSE 表达式n then 执行体;
END CASE;
语法解析
如果存在选择体,选择体 与 WHEN 后面的表达式匹配,匹配成功就执行 THEN 后面的语句。如果所有表达式都与选择体不匹配,则执行 ELSE 后面的语句。
案例:通过选择体CASE WHEN 区分出学生信息表中学生的各个年龄的人数。代码如下:
declare
ls_stuinfo stuinfo%rowtype;--学生信息表
ls_number_26 number:=0;--26岁计数器
ls_number_27 number:=0;--27岁计数器
ls_number number:=0;--其它
begin
--对学生信息表进行全表循环
for ls_stuinfo in ( select t.* from stuinfo t ) loop
case ls_stuinfo.age
when 26 then
ls_number_26:=ls_number_26+1;
when 27 then
ls_number_27:=ls_number_27+1;
else
ls_number:= ls_number+1;
end case;
end loop;
dbms_output.put_line('26岁:'||ls_number_26||'人,27岁:'||ls_number_27||'人,其它岁数:'||ls_number||'人');
end;
3.PL/SQL循环结构
3.1 for 循环
语法结构
--通过循环体直接进行loop循环
for 循环体别名 in (SELECT 条件查询数据) loop
--循环执行体;
end loop;
--通过循环变量进行循环
for 循环变量 in 循环下限...循环上限 loop
end loop;
案例:通过循环体直接LOOP循环参考案例1中的对表循环,我们通过第二种方式调整案例1的代码
declare
type stuinfo_type is table of stuinfo%rowtype;--学生信息表
ls_stuinfo stuinfo_type;--声明一个集合变量(学生集合变量)
ls_number number:=0;--计数器
begin
--赋值给学生集合变量
select * BULK COLLECT into ls_stuinfo from stuinfo;
--对集合变量进行for循环,通过下标取值
for i in 1.. ls_stuinfo.count loop
if ls_stuinfo(i).sex='1' then--性别编码为1的是男生
ls_number:=ls_number+1;--计数器加1
end if;
end loop;
dbms_output.put_line('男生的数量是:'||ls_number);
end;
3.2 while循环
语法结构
while 条件 loop
---循环执行体
end loop;
案例:一个简单1加到n(n=4)的代码的while循环代码
declare
ls_number number:=0;--结果值
i number:=1;--计数器
begin
while i<=4 loop
ls_number:=ls_number+i;
i:=i+1;
end loop;
dbms_output.put_line(ls_number);
end;
标签:end,loop,--,number,控制结构,ls,SQL,PL,stuinfo
From: https://www.cnblogs.com/mxx520/p/16985584.html