pl/sql进阶

pl/sql的条件语句,循环结构,顺序控制结构
条件分支语句
if-then...end if;
if-then-else...end if;
if then-elseif-else...end if;
简单的条件判断if-then...end if:
create or replace procedure sp_pro_ifthen(spName varchar2) is
v_sal emp.sal%type;--让v_sal和emp表的sal字段同一个类型
begin
select sal into v_sal from emp where ename=spName;
if v_sal<2000 then
update emp set sal=(1+0.1)*sal where ename=spName;
end if;
end;
二重条件分支if-then-else...end if;
create or replace procedure sp_pro_ifthenelse(spName varchar2) is
v_comm emp.comm%type;
begin
select nvl(comm,0) 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;
多重条件分支if-then-elseif-else...end if;
create or replace procedure sp_pro_elseif(spEmpno number) is
v_job emp.job%type;
begin
select job into v_job from emp where empno=spEmpno;
if v_job='PRESIDENT' then
update emp set sal=sal+1000 where empno=spEmpno;
elsif v_job='MANAGER' then
update emp set sal=sal+500 where empno=spEmpno;
else
update emp set sal=sal+200 where empno=spEmpno;
end if;
end;
循环语句结构:
loop
exit when ....
end loop;
loop是pl/sql中最简单的循环语句,这种循环语句以loop开头,以end loop结尾,这种循环至少会被执行一次。类似java的do...while循环语句。至少循环一次。
create or replace procedure sp_pro_loop(spName varchar2) is
v_num number:=1;
begin
loop
insert into testprouser values(v_num,spName);
exit when v_num=10;
v_num:=v_num+1;
end loop;
end;
while循环结构:类似java的while(){}循环语句
while....loop
end loop;
create or replace procedure sp_pro_while(spName varchar2) is
v_num number:=11;
begin
while v_num<=20 loop
insert into testprouser values(v_num,spName);
v_num:=v_num+1;
end loop;
end;
for循环:(不是很灵活,不太推荐使用)
begin
for i in reverse 1..10 loop
insert into testprouser values(i,'name');
end loop;
end;
顺序控制语句 goto,null
goto语句用于跳转到特定标号去执行语句。注意由于使用goto语句会增加程序的复杂性,并使得应用程序可读性变差,所以在做一般应用开发时,建议大家不要使用goto语句。
基本语法:goto lable,其中lable是已经定义好的标号;<<lable>>
null语句就是什么都不做。
游标类型定义:游标可以指定搜索表的类型,也可以不指定。
cursor 游标名 is select 列名 from 表名;
也可以指定游标类型:
v_cursor 游标名%rowtype;
fetch 游标名 into v_cursor;
游标用法:
open 游标名;
//for也会打开游标;
for 接受值变量(可不定义) in 游标名 loop(遍历游标)
end loop;
close 游标名;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值