游标提供了一种从集合性质的结果集中提供出单条记录的手段。初始时指向首记录。

  • 游标的种类

    静态游标、REF游标

    静态游标:能够理解为一个数据快照,打开游标后的结果集是数据库表中数据的备份,数据不会对表的DML操作而改变。

    ①显式静态游标:是指在使用之前必须有明白的游标定义,这样的游标的定义会关联数据查询语句。一般会返回一行或多行,打开游标后能够利用游标的位置对结果集进行检索,使之返回单一的行记录,用户能够操作该记录,关闭游标后就不能对结果集进行操作。

    ②隐式静态游标:和显式游标不同,它被PL/SQL自己主动管理,也被称为SQL游标。

  • 显示游标的使用

    语法

cursor cursor_name[(parameter_name datatype,...)]
is
select_statement;
使用步骤:声明、打开、读取数据、关闭

①声明游标
declare cursor cursor_name is select_statement;
②打开游标(游标一旦被打开,结果就是静态的了)
open cursor_name;
③读取数据
读取数据要用到fetch,它能够吧游标指向位置的记录读取到pl/sql声明的变量中。
fetch cursor_name into record_name
④关闭游标
close cursor_name;

游标中简单的loop语句

eg:

declare
cursor test_cursor is select * from test1;
test_id test1.id%type;
test_name test1.name%type;
test_money test1.money%type; begin
open test_cursor;
loop
fetch test_cursor into test_id,test_name,test_money;
exit when test_cursor%notfound;
dbms_output.put_line('.....');
end loop;
close test_cursor;
end;

须要注意的是:使用fetch…into..提取数据的时候的单条提取,数据量较大时效率比較低。

使用fetch…bulk collect into 提取大数据量的游标数据

eg:

declare
cursor emp_cursor is
select * from emp;
type emp_tab is table of emp%rowtype;
emp_rd emp_tab;
begin
open emp_cursor;
loop
fetch emp_cursor bulk collect into emp_rd limit 2;
for i in 1...emp_rd.count
loop
dbms_output.put_line(......);
end loop;
exit when emp_cursor%notfound;
end loop;
close emp_cursor;
end;

利用cursor … for … loop 便利游标数据。使用简洁、方便

eg:

declare
cursor test_cursor is
select * from test1;
begin
for rec in test_cursor
loop
dbsm_output.put_line(.....);
end loop;
end;

带參数的游标

eg:

declare
test_id1 test.id%type := 1;
test_id2 test.id%type := 2;
cd_test test1%rowtype;
cursor test_cursor(id1 number,id2 number)
is select * from test1 where id in(id1,id2);
begin
open test_cursor(test_id1,test_id2);
loop
fetch test_cursor into cd_test;
exit when test_cursor%notfound;
dbsm_output.put_line(...);
end loop;
close test_cursor;
end;
  • 隐式游标

    隐式游标和显式游标有所差异,它显没有显式游标的课操作性,每当执行DQL或DML语句时,PL/SQL会打开一个隐式游标,隐式游标不受用户控制。

    ①隐式游标由pl/sql自己主动管理

    ②隐式游标的默认名称是SQL

    ③DQL和DML语句产出隐式游标

    ④隐式游标的属性值是指是最新执行的sql语句的。

SQL-Oracle游标的更多相关文章

  1. Oracle学习2 视图 索引 sql编程 游标 存储过程 存储函数 触发器

    ---视图 ---视图的概念:视图就是提供一个查询的窗口,来操作数据库中的数据,不存储数据,数据在表中. ---一个由查询语句定义的虚拟表. ---查询语句创建表 create table emp a ...

  2. oracle游标透彻详解分析

    主:本文来自:http://www.cnblogs.com/huyong/archive/2011/05/04/2036377.html 4.1 游标概念 4.1.1 处理显式游标 4.1.2 处理隐 ...

  3. Oracle 游标

    游标的简介 游标的概念 游标是从数据表中提取出来的数据,以临时表的形式存放在内存中,在游标中有一个数据指针,在初始状态下指向的是首记录,利用fetch语句可以移动该指针,从而对游标中的数据进行各种操作 ...

  4. Oracle 游标使用(转)

    这个文档几乎包含了oracle游标使用的方方面面,全部通过了测试 ; ; dbms_output.put_line(sql) loop dbms_output.put_line( ; ; ; r_te ...

  5. Oracle 游标使用全解(转)

    转自:http://www.cnblogs.com/sc-xx/archive/2011/12/03/2275084.html 这个文档几乎包含了oracle游标使用的方方面面,全部通过了测试 -- ...

  6. Oracle游标动态赋值

    1. oracle游标动态赋值的小例子 -- 实现1:动态给游标赋值 -- 实现2:游标用表的rowtype声明,但数据却只配置表一行的某些字段时,遍历游标时需fetch into到精确字段 CREA ...

  7. Oracle 游标Cursor 的基本用法

    查询 SELECT语句用于从数据库中查询数据,当在PL/SQL中使用SELECT语句时,要与INTO子句一起使用,查询的 返回值被赋予INTO子句中的变量,变量的声明是在DELCARE中.SELECT ...

  8. Oracle游标介绍

    Oracle游标使用详解: 游标: 用来查询数据库,获取记录集合(结果集)的指针,我们所说的游标通常是指显式游标,因此从现在起没有特别指明的情况,我们所说的游标都是指显式游标.要在程序中使用游标,必须 ...

  9. Oracle游标使用

    Oracle游标介绍: --声明游标 CURSOR cursor_name IS select_statement --For 循环游标 --()定义游标 --()定义游标变量 --()使用for循环 ...

  10. [转载]Oracle 游标使用全解

    这个文档几乎包含了oracle游标使用的方方面面,全部通过了测试 -- 声明游标:CURSOR cursor_name IS select_statement --For 循环游标--(1)定义游标- ...

随机推荐

  1. AngularJS学习篇(二十)

    AngularJS 包含 在 AngularJS 中,你可以在 HTML 中包含 HTML 文件. 使用 AngularJS, 你可以使用 ng-include 指令来包含 HTML 内容: < ...

  2. vue初级学习--路由router的编写(resolve的使用)

    一.导语 最近在用vue仿写淘宝的商品详情页面以及加入购物车页面,若是成功了,分享给大家~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 二.正文 我先用控制台创建了vue项目demo(如 ...

  3. 从ELK到EFK演进

    背景 作为中国最大的在线教育站点,目前沪江日志服务的用户包含网校,交易,金融,CCTalk 等多个部门的多个产品的日志搜索分析业务,每日产生的各类日志有好十几种,每天处理约10亿条(1TB)日志,热数 ...

  4. python链接mysql以及常用语法

    MySQL是一个关系型数据库管理系统 ,其体积小.速度快.总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库.在使用过程中不总是和它打交道,导致使用时候都得 ...

  5. 一起写框架-Ioc内核容器的实现-基础功能-ComponentScan支持多包扫描(六)

    实现功能 1.我们看到@ComponentScan注解一个开始定义就是需要支持,扫描多个包,将多个包的类名获取到.现在就实现这个功能. 实现思路 根据传入的字符串数组,获得多个包下的类全限制名. 实现 ...

  6. WebService--axis

    axis WebService虽然现在已经很少使用,但是还是把它的配置过程写出来,开发环境jdk 1.6 服务端: 1,导入需要jar包,自行下载 2,创建WebService接口 public in ...

  7. 从零开始搭建Vue组件库 VV-UI

    前言: 前端组件化是当今热议的话题之一,也是我们在开发单页应用经常会碰到的一个问题,现在我们有了功能非常完善的Element-UI.各个大厂也相继宣布开源XXX-UI.但是也会存在一些问题,比如每个公 ...

  8. RabbitMQ的简单应用

    虽然后台使用了读写分离技术,能够在一定程度上抗击高并发,但是如果并发量特别巨大时,主数据库不能同时处理高并发的请求,这时数据库容易宕机. 问题: 现在的问题是如何既能保证数据库正常运行,又能实现用户数 ...

  9. 结合java.util.TreeMap源码理解红黑树

    前言 本篇将结合JDK1.6的TreeMap源码,来一起探索红-黑树的奥秘.红黑树是解决二叉搜索树的非平衡问题. 当插入(或者删除)一个新节点时,为了使树保持平衡,必须遵循一定的规则,这个规则就是红- ...

  10. HCTF

    题目:魂斗罗 介绍:这个是HCTF里面的杂项,很好玩的, 1,这个看链接可以下载(http://139.224.54.27/gogogo/hundouluo.nes),然后在网上下载一个虚拟器(htt ...