《oracle if控制语句经典实例及详解》由会员分享,可在线阅读,更多相关《oracle if控制语句经典实例及详解(3页珍藏版)》请在金锄头文库上搜索。
1、 OracleOracle 条件分支语句使用案例条件分支语句使用案例pl/sql 中提供了三种条件分支语句 if-then,if-then-else,if- then-elsif-else。这里需要注意一个细节(细节决定成败):elsif 而不 是 elseif。 一:简单的条件判断:if-then 案例 1:编写一个过程,可以输入一个雇员名,如果该雇员的工资低于 2000,就给该雇员工资增加 10%。 create or replace procedure sp_p2(spName varchar2) is v_sal emp.sal%type; begin select sal into
2、v_sal from emp where ename=spName; if v_sal exec sp_p2(SMITH);-调用存储过程旧工资为:880 新工资为:968PL/SQL procedure successfully completed二:二重条件分支 if-then-else 案例 3:编写一个过程,可以输入一个雇员名如果该雇员的补助不是 0,就 在原来的基础上增加 100;如果补助为零设为 200.create or replace procedure sp_p2(spName varchar2) is v_comm m%type; begin select comm int
3、o v_comm from emp where ename=spName; if v_comm0 then update emp set comm=comm+100 where ename=spName; else update emp set comm=comm+200 where ename=spName; end if; end; 注:此案例有只能更新为 0 或者大于零的,null 的不能修改。案例 4:弥补案例 3 的不足,此案例 comml 列为空的也可以进行修改。create or replace procedure sp_p2(spName varchar2) is v_comm
4、 m%type; begin select comm into v_comm from emp where ename=spName; if v_comm is null or v_comm = 0 then update emp set comm=nvl(comm,0)+100 where ename=spName; else update emp set comm=comm+200 where ename=spName; end if; end; 注:nvl(comm,0)当 comm 为空时返回零,不为空则返回 comm 值。 三::重条件分支 if-then-elsif-else。 案
5、例 5:编写一个过程,可以输入一个雇员编号,如果该雇员的职位是 persident 就给他的工资增加 1000,如果该雇员的职位是 MANAGER 就给他的工 资增加 500,其他职位的雇员工资增加 200.create or replace procedure sp_p3(spNo number) is v_job emp.job%type; begin select job into v_job from emp where empNo=spNo; if v_job=PERSIDENT then update emp set sal=sal+1000 where empno=spNo; e
6、lsif v_job=MANAGER then update emp set sal=sal+500 where empno=spNo; elseupdate emp set sal=sal+200 where empno=spNo; end if; end; 四:循环体 案例 1:最简单的循环 loop,以 loop 开头,以 end loop 结束。这种循环 至少执行一次。建一张表 users:用户 id,用户名 userName。编写一个过程, 可输入用户名,并循环的添加 10 个用户到 users 表中,用户编号从 1 开始。 (:= 表示赋值) (1)create table use
7、rs(userNO number,userName varchar2(40); (2)create or replace procedure sp_p4(spNname number) 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; (3)exec sp_p4(xx);-调用存储过程案例 2:(while.loop/end loop 结束)编写一个过程,可输入用户名, 并循环的添加 10 个用户到 users 表中,用户编号从 11 开始。现有一张表 users:用户 id,用户名。 (1)create or replace procedure sp_p5(spName varchar2) is v_num number:=11; begin while v_num20 loop insert into users values(v_num,spName); v_num:=v_num+1; end loop; end; end;(2)exec sp_p5(xxb);