博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
游标Cursor
阅读量:4709 次
发布时间:2019-06-10

本文共 1942 字,大约阅读时间需要 6 分钟。

游标:只是一个指向查询语句返回的结果的指针,因此定义游标时,将包含一个查询定义。

    当游标打开后,数据被接收到一块内存区域存储,直到游标关闭。

    游标定义时并不会获取游标数据,只有在游标被打开后,游标相关的查询语句被执行,然后将检索到的结果保存到内存中。

    游标实际上指向的是一块内存区域,改区域位于进程全局区(PGA,Program Global Area)内部,称为上下文区域(Context Area)。

    在该区域中保存了以下三类信息:

      (1)查询返回的数据行

      (2)查询所处理的数据的行号

      (3)指向共享池中已分析的SQL语句。

 

eg: 

-- Created on 3/13/2018 by HP declare  -- Local variables here  emprow emp%ROWTYPE;               --定义保存游标检索结果行的记录变量  CURSOR emp_cur IS                 --定义游标    select * from emp where deptno is not null;begin  -- Test statements here  open emp_cur;                     --打开游标  LOOP                              --循环检索游标    FETCH emp_cur                   --提取游标      into emprow;    DBMS_OUTPUT.put_line(emprow.empno);    EXIT WHEN emp_cur%NOTFOUND;     --当游标检索完成后退出循环  END LOOP;  CLOSE emp_cur;                    --关闭游标end;

在Oracle中, insert、Update、delete和select into 语句被执行时,都会隐含的创建游标,通过访问游标的四大属性 %FOUND、%ISOPEN、%NOTFOUND、%ROWCOUNT来访问游标的相关属性。

游标属性用于返回游标的执行信息,不论是显式游标,还是隐式游标,都包含四大属性 %FOUND、%ISOPEN、%NOTFOUND、%ROWCOUNT。

在使用显式游标属性时,必须带有游标名作为前缀,而使用隐式游标时,使用SQL作为前缀。

(1)%ISOPEN属性:判断对应的游标变量是否打开,如果打开,则返回true;否则返回false

(2)%FOUND属性:当游标被打开后,在调用fetch语句获取数据之前,%FOUND会产生NULL值,而此后每取得一行数据,其值为true,如果最后一次取得数据失败,其值会变为false。

(3)%NOTFOUND属性:与%FOUND属性相反。

(4)%ROWCOUNT属性:返回 到目前为止已经从游标中提取出的记录行数,当游标被打开时,%ROWCOUNT值为0,此后每提取一行数据,%ROWCOUNT的值就加1.

 

(一)批量提取游标数据: 使用 BULK COLLECT 批处理子句可以一次性将游标中的结果集保存到集合中。

eg:  FETCH   cursor_name BULK COLLECT  INTO collection_table_name;

(二)游标 FOR循环

-- Created on 3/13/2018 by HP declare  -- Local variables here  CURSOR dept_cursor IS    SELECT * FROM dept; --定义游标类型begin  -- Test statements here  for dept_row in dept_cursor LOOP    DBMS_OUTPUT.put_line(dept_row.dname);  END LOOP;end;

还可以在FOR语句的IN子句中使用子查询,而不用显示定义一个游标

-- Created on 3/13/2018 by HP declarebegin  -- Test statements here  for dept_row in (select * from dept) LOOP    DBMS_OUTPUT.put_line(dept_row.dname);  END LOOP;end;

 

   

转载于:https://www.cnblogs.com/ly01/p/8556885.html

你可能感兴趣的文章
leetcode133 - Clone Graph - medium
查看>>
UNET学习笔记2 - 高级API(HLAPI)
查看>>
"ORA-00942: 表或视图不存在 "的原因和解决方法[转]
查看>>
Oauth支持的5类 grant_type 及说明
查看>>
C#中用DateTime的ParseExact方法解析日期时间(excel中使用系统默认的日期格式)
查看>>
W3100SM-S 短信猫代码发送 上
查看>>
netty接收大文件的方法
查看>>
软件工程设计之四则运算
查看>>
SpringMVC @ResponseBody 406
查看>>
Partial Tree UVALive - 7190(完全背包)
查看>>
0816 1459 json & pickle ,目录导入,目录规范
查看>>
敏捷开发入门教程
查看>>
顺序容器的insert使用方法
查看>>
Markdown的使用
查看>>
销售系统学习.mdl
查看>>
触发器
查看>>
mysql配置默认字符集为UTF8mb4
查看>>
WPF实现3D翻转的动画效果
查看>>
自定义圆环进度条
查看>>
UILayer
查看>>