Oracle中的游标操作

游标是Oracle系统在内存中开辟的一个工作区,在其中存放SELECT语句返回的查询结果
<1>游标操作的过程
   (1) 定义游标
(2)打开游标
(3)游标的操作(移动,读取数据)
(4)关闭游标
注释:-- 游标的定义格式:cursor cusor_name is select语句
      -- 游标的打开: open 游标名
      -- 游标读取数据: fetch 游标名 into 变量1,变量2……(这里可以是普通变量,也可以是记录类型的变量)
      -- 关闭游标:   close 游标名
      --游标只能向后移动,不能返回。
<2>游标操作举例
   Declare
      Row person%rowtype;--定义了一个记录类型的变量
      Increment number(4);--定义了一个普通变量
      Cursor cursor_person is select * from person; -定义游标变量
      I number(2);--定义普通变量
   Begin
      Select count(*) into I from person;--i变量保存person表中的记录总数
      Open cursor_person;        ----打开游标
      Loop
         Fetch cursor_person into row;      ----取出游标中的数据放到记录类型的变量中
         If row.id=2 then
           Increment:=1;
         Elseif row.id=3 then
           Increment:=2;
         End if;
         Update person set age=age+ Increment where name=row.name;
         I:=i-1;
         Exit when i=0;
     End loop;
     Close cursor_person;        ----关闭游标   
     End;
     /
     注解:将表中号码是2的人年龄加1,号码是3的人年龄加2.
   <3>游标的属性:
      ----%ISOPEN:该属性判断游标是否已经打开,若已经打开,则返回值值true,否则返回false
      ------%FOUND若最近一次fetch操作结果存在,那么就返回true
      ------%NOTFOUND同%FOUND相反
      ------%ROWCOUNT返回游标操作过的记录总数
   上面的举例可以改写为:

     Declare
      Row person%rowtype;--定义了一个记录类型的变量
      Increment number(4);--定义了一个普通变量
      Cursor cursor_person is select * from person; -定义游标变量
   Begin
      Open cursor_person;        ----打开游标
      Loop
         Fetch cursor_person into row;      ----取出游标中的数据放到记录类型的变量中
         Exit when cursor_person%NOTFOUND;
         If row.id=2 then
           Increment:=1;
         Elseif row.id=3 then
           Increment:=2;
         End if;
         Update person set age=age+ Increment where name=row.name;
     End loop;
     Close cursor_person;        ----关闭游标   
     End;
     /
    <4>for循环在游标操作中的应用
       基本格式:
         For 变量名(此变量名无需定义) in 游标名 loop
               循环体部分
         End loop;
       说明:for循环会自动的打开和关闭游标
       下面是上例子在for循环中的使用情况:
   Declare
      Increment number(4);--定义了一个普通变量
      Cursor cursor_person is select * from person; -定义游标变量
   Begin
      For row in cursor_person loop
         If row.id=2 then
           Increment:=1;
         Elseif row.id=3 then
           Increment:=2;
         End if;
         Update person set age=age+ Increment where name=row.name;
     End loop;       ----关闭游标   
     End;
     /
  <5>带参数的游标操作
     定义的格式:
     Cursor cursor_name(variable1 type, variable2 type …………….) is selectStatement
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值