关闭

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

标签: 数据库plsql
741人阅读 评论(0) 收藏 举报
分类:

       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;
/


0
0

猜你在找
【直播】机器学习&数据挖掘7周实训--韦玮
【套餐】系统集成项目管理工程师顺利通关--徐朋
【直播】3小时掌握Docker最佳实战-徐西宁
【套餐】机器学习系列套餐(算法+实战)--唐宇迪
【直播】计算机视觉原理及实战--屈教授
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之矩阵--黄博士
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之凸优化--马博士
【套餐】Javascript 设计模式实战--曾亮
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:187304次
    • 积分:3246
    • 等级:
    • 排名:第10431名
    • 原创:134篇
    • 转载:3篇
    • 译文:0篇
    • 评论:37条
    最新评论