Cursor

###1. 概念 在oracle数据库中,为了处理SQL数据集,涉及到的操作有:select,insert,update,delete,主要是select。oracle会在内存中分配一块缓冲区,这个缓冲区存储了已经处理完的数据行集,游标就是一个指针,指向这个数据集,利用游标可以处理整个数据集。 ###2. 游标分类 | 操作类别 | 游标类型| |--------|---------| | 非select| 隐式游标| |Select 结果是单行|隐式/显示| |Select 结果是多行| 显示| ###3. 游标属性

  • ####显式游标
属性说明
cursor_name %FOUND布尔类型,提取数据成功返回TRUE
cursor_name %NOTFOUND与FOUND相反
cursor_name %ISOPEN布尔类型,游标打开成功返回TRUE
cursor_name %ROWCOUNT数值类型,返回已从游标读取的记录数
  • ####隐式游标
属性说明
SQL %FOUND布尔类型,提取数据成功返回TRUE
SQL %NOTFOUND与FOUND相反
SQL %ISOPEN布尔类型,游标打开成功返回TRUE
SQL%ROWCOUNT数值类型,返回影响的行数。select:只能是1行;insert:插入的行数;update:更新的行数;delete:删除的行数

4. 显式游标使用步骤

  • 声明游标
    CURSOR  cursor_name[(参数)]    
             [返回值]  
     IS   
     select语句
    
+ 打开游标      

OPEN cursor_name

+ 提取并处理数据    
```oracle   
方式1:
LOOP
    FETCH  cursor_name INTO record_list;
     .....
END LOOP;
方式2:
FOR  record  IN  record_list
LOOP
    ....;
END LOOP;   

fetch每次返回一个数据行,可以通过cursor_name%FOUND来判断数据是否遍历结束

  • 关闭游标
CLOSE  cursor_name
例子

fetch方式:

DECLARE    
   CURSOR c_name
   is
  select * from  student;
   var    c_name % ROWTYPE;    #定义变量var    
  BEGIN
    OPEN  c_name;
    LOOP
            FETCH  c_name into var;
            EXIT  WHEN c_name % NOTFOUND;
            DBMS_OUTPUT.put_line(var.name);
    END LOOP
    CLOSE    c_name;
END;

for方式:

DECLARE   
      CURSOR   c_name
       IS    
       select * from student;
BEGIN
        FOR  var IN  c_name    
        LOOP
            DBMS_OUTPUT.put_line(var.name);
        END LOOP
END;
for方式中,游标的open ,close都是隐式调用了。      

带有输入参数

DECLARE
    CURSOR c_name(s integer)
    IS
    select * from student where mark > s;   #分数大于s的学生
BEGIN
    FOR  var IN c_name(60)
    LOOP
        DBMS_OUTPUT.put_line(c_name%ROWCOUNT||"记录:"|| var.name|| ":"|| var.mark);
    END LOOP;
END;

###5. 隐式游标使用
隐式游标的名字为SQL,由oracle系统自定义,用户只能通过隐式游标的相关属性来完成特定的操作。 ####例子 查看更新操作,数据库表变化的行数

BEGIN
    update student set mark=60 where mark < 60;
     DBMS_OUTPUT.put_line(SQL%ROWCOUNT);
END;

转载于:https://my.oschina.net/u/2408950/blog/1305468

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值