PL/SQL 条件分支(一)
--数据库中的分支语句(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;
-------------------------------------------------------------------------------------------------