PL\SQL学习笔记(五) 游标

       PL\SQL 语句用游标来管理SQL语句返回的记录. 游标是为处理这些语句而分配的一个私有SQL工作区,用来执行和存储SQL语句处理的信息.Oracle服务器用游标来命名每一个SQL工作区,不同的SQL语句,游标的使用情况不同,可将游标分为两类:隐式游标和显示游标.

       隐式游标对应于DML语句和select语句的执行空间和相应的信息.系统自动将此类游标命名为SQL.例如,执行一条SELECT语句时,Oracle 自动为该语句创建一个游标,当"打开"游标时,实际上是执行该SELECT语句将数据读取到SQL工作区中;当移动游标指针时,实际上是将游标指针指向该SELECT语句返回的下一条记录.

       显示游标一般用于需要对多条记录按顺序一条一条进行处理的场合,能方便地控制数据的处理过程,被处理的数据集成为活动数据集.显示游标由程序员定义和维护,名称由程序员确定.

   

declare
 cursor c is
 select * from emp;
v_emp c%rowtype;
begin
open c;
fetch c into v_emp;
dbms_output.put_line(v_emp.ename);
close c;
end;
/

游标加入循环

declare
   cursor c is
   select * from emp;
v_emp c%rowtype;
begin
 open c;
loop

fetch c into v_emp;
exit when (c%notfound);
dbms_output.put_line(v_emp.ename);

end loop;
close c;
end;
/

游标的属性:


 1)%ISOPEN:  布尔型.判断指定的游标是否已经打开

 2)%NOTFOUND 布尔型.如最近一次fetch操作没有返回结果,则值为TRUE .

 3)%FOUND 布尔型 .最近一次fetch操作有返回结果,则值为TRUE .

 4)%ROWCOUNT 数值型 ,取值为当前位置返回的记录数,可用该属性控制要处理的记录数.


for 循环:


declare
   cursor c is
       select * from emp;
  begin
 for v_emp in c loop
    dbms_output.put_line(v_emp.ename);
end loop;
end;
/

带参数的游标:

declare
 cursor c (v_deptno emp.deptno%type,v_job emp.job%type)
  is
     select ename,sal from emp where deptno = v_deptno and job = v_job;
   --v_temp c%rowtype;
begin
 for v_temp in c(30,'CLERK') loop
    dbms_output.put_line(v_temp.ename);
end loop;
end;
/

使用游标进行更新 : 非重点


declare
 cursor c
  is
  select * from emp2 for update;
--v_temp c%rowtype ;
begin

   for v_temp in c loop
  if(v_temp.sal<2000) then
 update emp2 set sal =sal *2 where current of c;
   elsif (v_temp.sal = 5000) then
  delete from emp2 where current of c;
end if ;
end loop;
commit;
end;
/


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值