PL/SQL 条件分支(一)

本文介绍并演示了SQL中的三种分支语句(if-then、if-then-else、if-then-elsif-else)及三种循环语句(loop、while、for)的应用案例。通过实际操作展示如何根据不同条件更新数据库记录以及批量插入数据。

--数据库中的分支语句(3种)

案例:

--    if-then
--编写过程:输入雇员名字,如果该雇员的工资低于10%,则工资增加10%
create or replace procedure sp_pro6(spName varchar2) is
v_sal emp.sal%type;--定义工资
begin
select sal into v_sal from emp where ename=spName; 
--判断
if v_sal<2000 then
update emp set sal=sal*1.1 where ename=spName;
end if;
end;

=====================================================================


案例:

-- if-then-else

-输入雇员名字,如果该雇员的comm不是0,则comm增加100,若为0,则comm增加200

create or replace procedure sp_pro7(spName varchar2) is
v_comm emp.comm%type;
begin
select comm into v_comm from emp where ename=spName;
if v_comm<>0 then
update emp set comm=comm+100 where ename=spName;
else
update emp set comm=comm+200 where ename=spName;
end if;
end;
--本案例中可以使用NVL将comm中为null的变为0

=========================================================================


案例:

--输入雇员名字,如果该雇员的职位是PRESIDENT,就将工资增加1000,如果该雇员的职位是MANAGER,就将工资增加500,其他职位员工增加200

--if-then-elsif then-else
--输入雇员编号,如果该雇员的职位是PRESIDENT,就将工资增加1000,
--如果该雇员的职位是MANAGER,就将工资增加500,其他职位员工增加200
create or replace procedure sp_pro8(spNo number) is
v_job emp.job%type;
begin
select job into v_job from emp where empno=spNo;
if v_job='PRESIDENT' then
update emp set sal=sal+1000 where empno=spNo;
elsif v_job='MANAGER' then
update emp set sal=sal+500 where empno=spNo;
else
update emp set sal=sal+200 where empno=spNo;
end if;
end;

================================================================


--循环语句(3种)



--1. loop开头 end loop结尾,类似于do...while,至少执行一次
--案例:有一张users表,两个字段(id,name),编写过程,循环添加10个用户到表中,编号从1开始
create table users(--建表
  id number,
  name varchar2(40)
);


create or replace procedure sp_pro9(spName varchar2) is
v_num number:=1;
begin
loop
  insert into users values (v_num,spName);
  --判断是否要退出循环
  exit when v_num=10;
  --自增
  v_num:=v_num+1;
end loop;
end;

------------------------------------------------------

在sql/plus中进行测试

exec sp_pro9('你好');

输出结果为:

ID NAME
-- -----
 1 你好
 2 你好
 3 你好
 4 你好
 5 你好
 6 你好
 7 你好
 8 你好
 9 你好
10 你好

------------------------------------------------------------

2.while循环


--2.while循环
--条件为true时执行循环体语句,while循环以while...loop开始,以end loop结束
--案例:有一张users表,两个字段(id,name),编写过程,循环添加10个用户到表中,编号从11开始
create or replace procedure sp_pro11(spName varchar2) is
v_num number:=11;
begin
while v_num<=20 loop
--执行部分
  insert into users values (v_num,spName);
  v_num:=v_num+1;
end loop;
end;

----------------------------------------------------------------------------------------

3.for循环


--3.for循环
--案例:有一张users表,两个字段(id,name),编写过程,循环添加10个用户到表中,编号从21开始
create or replace procedure sp_pro12(spName varchar2) is
begin
  for i in 21..30 loop
  insert into users values (i,spName);
  end loop;
end;

-------------------------------------------------------------------------------------------------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荒--

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值