文档章节

Cursor

 迈Ko
发布于 2017/07/10 17:21
字数 562
阅读 3
收藏 0

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

© 著作权归作者所有

上一篇: 函数与存储过程
下一篇: 基本查询
粉丝 0
博文 13
码字总数 4535
作品 0
深圳
私信 提问

暂无文章

Executor线程池原理与源码解读

线程池为线程生命周期的开销和资源不足问题提供了解决方 案。通过对多个任务重用线程,线程创建的开销被分摊到了多个任务上。 线程实现方式 Thread、Runnable、Callable //实现Runnable接口的...

小强的进阶之路
49分钟前
6
0
maven 环境隔离

解决问题 即 在 resource 文件夹下面 ,新增对应的资源配置文件夹,对应 开发,测试,生产的不同的配置内容 <resources> <resource> <directory>src/main/resources.${deplo......

之渊
今天
8
0
详解箭头函数和普通函数的区别以及箭头函数的注意事项、不适用场景

箭头函数是ES6的API,相信很多人都知道,因为其语法上相对于普通函数更简洁,深受大家的喜爱。就是这种我们日常开发中一直在使用的API,大部分同学却对它的了解程度还是不够深... 普通函数和...

OBKoro1
今天
7
0
轻量级 HTTP(s) 代理 TinyProxy

CentOS 下安装 TinyProxy yum install -y tinyproxy 启动、停止、重启 # 启动service tinyproxy start# 停止service tinyproxy stop# 重启service tinyproxy restart 相关配置 默认...

Anoyi
今天
2
0
Linux创建yum仓库

第一步、搞定自己的光盘 #创建文件夹 mkdir -p /media/cdrom #挂载光盘 mount /dev/cdrom /media/cdrom #编辑配置文件使其永久生效 vim /etc/fstab 第二步,编辑yun源 vim /ect yum.repos.d...

究极小怪兽zzz
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部