

一重,二重,多重分支的if语句及例子,loop循环,while循环及举例
pl/sql进阶
oracle的视图 安全,节约磁盘空间,
oracle的触发器
掌握高级用法,能写分页过程,java调用
会处理oracle常见的例外
会写各种触发器
理解视图的概念并能灵活应用
控制语句,条件,循环,顺序结构
各种if语句,
使用循环语句
goto和null语句 ,goto语句不推荐使用
条件分支的三种结构:
一层分支:if--then--end if;
二重分支:if--then--else--end if;
多重分支:if--then--else if--else if--else--end if;
输入一员工名,如其工资低于2000,就给其工资加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+sal*1.1where ename=spName; --这里出错,要把sal*10%改为sal*1.1
end if;
end;
/
调用
exec sp_pro6('SCOTT');
exec sp_pro6('FORD');
二重条件分支 if--then--else
例:输入雇员名,如果员工补助不为0就加100,如果为0就加200
create or replace procedure sp_pro6(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;
注:这些语句只能部门达到目的,如是com为空则值不会增加
多重分支
例:输入一个雇员的编号,如果职位是president,就给他的工资增加1000,是manager就加500,其它加200
create or replace procedure sp_pro6(spNo number) is
v_job emp.job%type;
begin
select job into v_job from emp where empno=spNo;
if v_job='PRESDIENT' then
update emp set sal=sal+1000 where empno=spNo;
elsif v_job='MANAGER' then --注:这里是elsif,没有e,如果改成elseif就会出语法错误,在pl/sql编辑器中写错颜色也不一样
update emp set sal=sal+500 where empno=spNo;
else
update emp set sal=sal+200 where empno=spNo;
end if;
end;
/
调用
exec sp_pro6(7839);
loop循环语句举例:
create table users1(userNo number,username varchar2(40)); //先创建一个user1表有以演示loop语句
循环插入spName字段10次
create or replace procedure sp_pro6(spName varchar2) is
v_num number:=1;//定义v_num类型为number,并赋初始值为1
begin
loop
insert into users1 values(v_num,spName);
exit when v_num=10;
v_num:=v_num+1;
end loop;
end;
/
调用过程
exec sp_pro6('你好');
while循环语句举例:
添加10个数据,从11开始
create or replace procedure sp_pro6(spName varchar2) is
v_num number:=11;--定义v_num类型为number,并赋初始值为11
begin
while v_num<=20 loop
insert into users1 values(v_num,spName);
v_num:=v_num+1;
end loop;
end;
/