北大青鸟oracle学习笔记19 20 21 22

游标
指向上下文区域的句柄或指针
游标在服务器段存储

属性
    %NOTFOUND  没有找到结果或没有操作成功
    %FOUND  找到结果或操作成功
    %ROWCOUNT  游标影响的行数
    %ISOPEN  游标是否打开 隐式游标系统自动维护,永远为假


类型:
静态游标

-隐式游标
    在oracle内部声明
    用于处理DML语句和返回单行的查询 
   
    SQL为隐式游标默认名称,例:
begin
  insert into student values('3','test','m',sysdate);
  dbms_output.put_line('游标影响的行数:'||SQL%ROWCOUNT);
end;

-显式游标
由用户显示声明
游标指向活动集的当前行
控制显示游标
Open 打开游标
Fetch … into …
Close 关闭游标

declare
  cursor stuCur is select * from student;
  stuRow student%rowtype;
begin
  open stuCur;
  loop
    fetch stuCur into sturow;
    exit when stuCur%NotFound;
    dbms_output.put_line(sturow.stu_name);
    dbms_output.put_line(stuCur%RowCount);
  end loop;
  close stuCur;
end;

REF游标(动态游标)
在运行时使不同的语句与之关联
REF游标使用游标变量
    游标变量:一种引用类型,可以在运行时指向不同的存储位置,close语句关闭游标并释放用于查询的资源。

类型:
有约束的游标变量:具有返回类型 定义游标时加上return 游标类型
declare
  type RefstuCur is ref cursor return stu%rowtype;
  stuCur RefstuCur;
  sturow student%rowtype;
  flag int :=0;
begin
  flag := &flag;
  if flag = 0 then
    open stucur for select * from student where stu_id <= '2';
  else
    open stucur for select * from student where stu_id > '2';
  end if;
 
   loop
    fetch stuCur into sturow;
    exit when stuCur%NotFound;
    dbms_output.put_line(sturow.stu_name);
  end loop;

end;


无约束的游标变量:无返回类型
declare
  type RefstuCur is ref cursor;
  stuCur RefstuCur;
  sturow student%rowtype;
  flag int :=0;
begin
  flag := &flag;
  if flag = 0 then
    open stucur for select * from student where stu_id <= '2';
  else
    open stucur for select * from student where stu_id > '2';
  end if;
 
   loop
    fetch stuCur into sturow;
    exit when stuCur%NotFound;
    dbms_output.put_line(sturow.stu_name);
  end loop;

end;


由于在for循环中会自动打开游标,无哦一REF游标不能再for循环中使用!
for stuRow in stuCur loop
    …
end loop;

游标限制:
不能再程序包中声明游标变量
远程子程序不能接受游标变量的值
不能使用比较操作符对游标变量进行相等或不相等测试
不能将空值赋予游标变量
表不能存储游标变量的值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值