PLSQL控制语句

本文详细介绍了PLSQL中的流程控制语句,包括if、else、elsif、case选择语句以及loop、while、for循环语句的语法和用法,并通过实例演示了如何运用这些语句来解决实际问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

PLSQL流程控制语句
1.if语句
语法:
if 条件表达式 then
plsql语句;
end if;
语义:当条件成立时,执行then和end if之间的代码,如果条件不成立,不做任何操作
条件表达式:和sql的条件相同(不能使用 like,in,not in,>any,<any,>all,<all,exists,not exists)
plsql语句:sql语句和流程控制语句

–写一个代码块,从键盘接收一个值,如果这个值大于10,那么打印这个值,如果小于10什么也不做
declare
–声名一个变量保存,键盘输入的值
n number:=&值;
begin
if n>10 then
dbms_output.put_line(n);
end if;
end;

–写一个代码块,判断一个部门下是否有员工, --声名一个变量接收一个键盘输入的值
select count(1) from emp where deptno=10; --count大于0,说明有员工 声名一个变量保存员工人数
–如果有员工,打印部门信息,
select * from dept where deptno=10; --声名三个变量保存部门信息
–如果没有员工什么也不做
declare
–声名一个变量,保存键盘输入的部门编号
dno number:=&部门编号;
–声名一个变量,保存部门下的员工人数
n number;
–声名三个变量,保存部门的信息
v_deptno dept.deptno%type;
v_dname dept.dname%type;
v_loc dept.loc%type;
begin
–查询员工人数
select count(1) into n from emp where deptno=dno;
if n>0 then
–查询部门信息
select * into v_deptno,v_dname,v_loc from dept where deptno=dno;
–打印变量的值(打印部门信息)
dbms_output.put_line(‘部门编号:’||v_deptno||’,部门名称:’||v_dname||’,部门位置:’||v_loc);
end if;
end;

/*
写一个代码块,判断数据库中是否包含一张表,
如果表不存在,创建一张表
如果表存在,不用创建
向表里添加一条数据
*/

2.else语句
语法:
if 条件表达式 then
plsql语句
else
plsql语句
end if;
语义:当if后面的条件成立时,执行then和else之间的语句,
如果条件不成立,执行else和end if之间的程序

–写一个程序,从键盘输入两个值,判断两个值的大小,打印比较大的值
declare
–声名两个变量,保存键盘输入的两个值
m number:=&第1个值;
n number:=&第2个值;
begin
if m > n then
–m是最大值,打印m
dbms_output.put_line(‘m=’||m);
else
–n是较大的值,打印n
dbms_output.put_line(‘n=’||n);
end if;
end;

3.elsif语句
语法:
if 条件表达式1 then
plsql语句
elsif 条件表达式2 then
plsql语句
elsif 条件表达式3 then
plsql语句

else
plsql语句
end if;
语义:当前条件1成立时,执行then和elseif之间的代码
当elsif后面的条件成立时,执行相应的then和elseif之间的代码
如果所有条件都不成立,执行else和endif之间的代码
只有一个分支被执行,其中else部分是可以省略的
–写一个代码块,输入一个成绩
–如果成绩小于60,打印不及格
–如果大于60小于70,打印及格
—如果大于70小于80,打印良好
–如果大于80,打印优秀
declare
–声名一个变量保存成绩
score number:=&成绩;
begin
if score<60 then
dbms_output.put_line(‘不及格’);
elsif score<70 then
dbms_output.put_line(‘及格’);
elsif score<80 then
dbms_output.put_line(‘良好’);
else
dbms_output.put_line(‘优秀’);
end if;
end;

4.case语句
语法1:
case
when 条件表达式 then
plsql语句
when 条件表达式 then


else
plsql语句
end case;

语法2:
case 表达式
when 值 then
plsql语句
when 值 then
plsql语句
。。。
else
plsql语句
end case;

表达式:返回一个固定的值
when 用来列举表达式结果,如果表达式的结果和when列的值相同时,执行相应的plsql语句
只有一个分支被执行

declare
–声名一个变量,接收键盘输入的成绩
score number:=&成绩;
begin
case
when score<60 then
dbms_output.put_line(‘不及格’);
when score<70 then
dbms_output.put_line(‘及格’);
when score<80 then
dbms_output.put_line(‘良好’);
else
dbms_output.put_line(‘优秀’);
end case;
end;

–能
/**
<60 floor(score/10) 5,4,3,2,1,0 不及格

=60 <70 floor(score/10) 6 及格
=70 <80 7 良好
80~100 8,9,10 优秀

*/
declare
score number:=&成绩;
begin
case floor(score/10)
when 10 then
dbms_output.put_line(‘优秀’);
when 9 then
dbms_output.put_line(‘优秀’);
when 8 then
dbms_output.put_line(‘优秀’);
when 7 then
dbms_output.put_line(‘良好’);
when 6 then
dbms_output.put_line(‘及格’);
else
dbms_output.put_line(‘不及格’);
end case;
end;

循环:相同或相似的代码重复执行
5.loop循环***
语法:
loop
–循环体语句 实现功能的代码
–退出循环语句 决定退出循环的时机 条件 exit:表示退出循环 exit when 退出条件
–循环控制语句 修改循环变量的值
end loop;
loop循环需要自己声名循环变量,结合退出条件决定循环执行的次数

使用loop循环打印 1~9
1
2
3
4
5
6
7
8
9
begin
dbms_output.put_line(1);
dbms_output.put_line(2);
dbms_output.put_line(3);
dbms_output.put_line(4);
dbms_output.put_line(5);
dbms_output.put_line(6);
dbms_output.put_line(7);
dbms_output.put_line(8);
dbms_output.put_line(9);
end;

declare
–声名一个循环变量,保存数字
n number:=1;
begin
/***
n=1
第1次 打印n的值 n=1 判断退出条件n>8 1>8不成立 n=n+1=2
第2次 … n=2 …2>8 … n=n+1=3
第3次 。。。。。n=3 …3>8 … n=n+1=4

第8次   ,........ n=8   。。。。。。。。8>8 ...     n=n+1=9
第9次  。。。。。n=9    ................9>8成立 exit

/
loop
–循环体语句
dbms_output.put_line(n);
–退出循环语句
exit when n>8;
/

if n>8 then
exit;
end if;
*/
–循环控制语句
n:=n+1;

end loop;
end;

declare
–声名一个循环变量,保存数字
n number:=1;
begin
/***
n=1
第1次 n>8 1>8不成立 打印n=1 n=n+1=2
第2次 n>8 2>8… …n=2 n=n+1=3
第3次 。。3>8… …n=3 n=n+1=4

第7次         7>8 ...       打印n=7      n=n+1=8
第8次         8> ....       打印n=8      n=n+1=9
第9次         9>8成立 退出循环 

*/
loop
–退出循环语句
exit when n>9;
–循环体语句
dbms_output.put_line(n);
–循环控制语句
n:=n+1;
end loop;
end;

6.while循环***
语法:
while 循环条件 loop
–循环体语句
–循环控制语句
end loop;

declare
–声名一个循环变量
n number:=1;
begin
/**
n=1
第1次 判断while后面的循环条件 n<=9 1<=9成立 打印n=1 n=n+1=2
第2次 …2<=9… 打印n=2 n=n+1=3
第3次 …3<=9… …n=3 n=n+1=4

 第8次    。。。。。。。。。。。。。。 8<=9       打印n=8    n=n+1=9
 第9次    .............................9<=9       打印n=9    n=n+1=10
 第10次   。。。。。。。。。。。。。。 10<=9不成立退出

*/
while n<=9 loop
–循环体语句
dbms_output.put_line(n);
–循环控制语句
n:=n+1;
end loop;
end;

7.for循环***
语法:
for 循环变量 in [reverse] 集合|游标|select语句 loop
–循环体语句;
end loop;
reverse:表示反转

begin
for n in reverse 1…9 loop
dbms_output.put_line(n);
end loop;
end;
min…max:表示一连续数字集合

–当for循环in后面不是数字集合时,循环变量默认是一个记录类型 变量名.属性名
begin
for v in (select ename,sal from emp) loop
dbms_output.put_line(v.ename||’,’||v.sal);
end loop;
end;

for循环的循环变量不需要声名,但是只能在loop和end loop之间使用

for循环:不需要声名循环变量,也不需要有循环控制语句,只需要写循环体语句
循环变量,当前循环是一个数字集合时,循环变量是一个整数类型
当前循环的是一个select语句时,不管select语句查询了几列
循环变量都是一个记录类型(取值的方式:变量.列名(别名))
一般使用在遍历有固定边界的集合

exit:表示退出循环
continue:表示退出本次循环,继续下一次循环
return:表示结束程序

–for循环
declare

begin
for v in 1…9 loop
—exit when v=5;
if v=5 then
–执行exit;
exit;
end if;
–打印
dbms_output.put_line(v);
end loop;

–打印一名话
dbms_output.put_line(‘循环外面的语句’);
end;

begin
/***
第1次 v=1 v=5?不成立 打印v=1
第2次 v=2 v=5?。。。 打印v=2


第5次 v=5 v=5成立执行continue
第6次 v=6 v=5?不成立 打印v=6
。。。
*/
for v in 1…9 loop
if v=5 then
–执行continue
continue;
end if;
–循环体语句
dbms_output.put_line(v);
end loop;
–打印一名话
dbms_output.put_line(‘循环外面的语句’);
end;

begin
/***
第1次循环 v=1 v=5?不成立 打印v=1
第2次循环 v=2 v=5?.. 打开v=2

第4次 v=4 v=5? … 打印v=4
第5次 v=5 v=5成立 执行return语句程序结果(end)

*/
for v in 1…9 loop
if v=5 then
–执行return
return;
end if;
–循环体语句
dbms_output.put_line(v);
end loop;
–打印一名话
dbms_output.put_line(‘循环外面的语句’);
end;

loop循环:需要声名循环变量,条件是退出循环条件,需要循环控制语句(修改循环变量的值),循环变量可以在循环外使用
while循环:需要声名循环变量,条件是循环条件,需要循环控制语句(修改循环变量的值),循环变量可以在循环外使用

以上两种不能用来遍历select语句的查询结果集

for循环:不需要声名循环变量,不需要写条件(可以在循环体中加条件),循环本身会改变循环变量,循环变量不可以在循环外使用
for循环可以遍历一个select语句的查询结果

begin
/***
外循环生成1到9行
1次: i=1 for j in 1…i loop == for j in 1…1
内循环
1 j=1 dbms_output.put(j||’’||i||’=’||(ij)||’ ');
1*1=1

                      换行

2次 i=2 for j in 1…2 loop
内循环
1 j=1 dbms_output.put(j||’’||i||’=’||(ij)||’ ‘);
12=2
2 j=2 dbms_output.put(j||’
’||i||’=’||(ij)||’ ');
1
2=2 2*2=4
换行

/
for i in 1…9 loop
for j in 1…i loop
dbms_output.put(j||’
’||i||’=’||(ij)||’ ');
/

if i*j < 10 then
dbms_output.put(’ ');
end if;
*/
end loop;
dbms_output.new_line();
end loop;
end;

1 11=1 1…1
2 1
2=2 22=4 1…2
3 1
3=3 23=6 33=9 1…3
4 14=4 24=8 34=12 44=16 1…4
5 15=5 25=10 35=15 45=20 55=25 1…5
6 1
6=6 26=12 36=18 46=24 56=30 66=36 1…6
7 1
7=7 27=14 37=21 47=28 57=35 67=42 77=49 1…7
8 18=8 28=16 38=24 48=32 58=40 68=48 78=56 88=64 1…8
9 19=9 29=18 39=27 49=36 59=45 69=54 79=63 89=72 9*9=81 1…9

8.goto语句(了解)
语法:
<<标签名>>
循环体语句
if 循环条件 then
goto 标签名
end if;

declare
–声名一个循环变量n
n number:=1;
begin
/***
n=1
1次 打印n=1 n=n+1=2 n<10?2<10成立 goto lab
2 打印n=2 n=n+1=3 … goto lab
2 。。。

*/
<>
–循环体语句
dbms_output.put_line(n);
–循环控制语句
n:=n+1;
if n<10 then
goto lab;
end if;
end;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值