SQL-Oracle游标
游标提供了一种从集合性质的结果集中提供出单条记录的手段。初始时指向首记录。
游标的种类
静态游标、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游标的更多相关文章
- Oracle学习2 视图 索引 sql编程 游标 存储过程 存储函数 触发器
---视图 ---视图的概念:视图就是提供一个查询的窗口,来操作数据库中的数据,不存储数据,数据在表中. ---一个由查询语句定义的虚拟表. ---查询语句创建表 create table emp a ...
- oracle游标透彻详解分析
主:本文来自:http://www.cnblogs.com/huyong/archive/2011/05/04/2036377.html 4.1 游标概念 4.1.1 处理显式游标 4.1.2 处理隐 ...
- Oracle 游标
游标的简介 游标的概念 游标是从数据表中提取出来的数据,以临时表的形式存放在内存中,在游标中有一个数据指针,在初始状态下指向的是首记录,利用fetch语句可以移动该指针,从而对游标中的数据进行各种操作 ...
- Oracle 游标使用(转)
这个文档几乎包含了oracle游标使用的方方面面,全部通过了测试 ; ; dbms_output.put_line(sql) loop dbms_output.put_line( ; ; ; r_te ...
- Oracle 游标使用全解(转)
转自:http://www.cnblogs.com/sc-xx/archive/2011/12/03/2275084.html 这个文档几乎包含了oracle游标使用的方方面面,全部通过了测试 -- ...
- Oracle游标动态赋值
1. oracle游标动态赋值的小例子 -- 实现1:动态给游标赋值 -- 实现2:游标用表的rowtype声明,但数据却只配置表一行的某些字段时,遍历游标时需fetch into到精确字段 CREA ...
- Oracle 游标Cursor 的基本用法
查询 SELECT语句用于从数据库中查询数据,当在PL/SQL中使用SELECT语句时,要与INTO子句一起使用,查询的 返回值被赋予INTO子句中的变量,变量的声明是在DELCARE中.SELECT ...
- Oracle游标介绍
Oracle游标使用详解: 游标: 用来查询数据库,获取记录集合(结果集)的指针,我们所说的游标通常是指显式游标,因此从现在起没有特别指明的情况,我们所说的游标都是指显式游标.要在程序中使用游标,必须 ...
- Oracle游标使用
Oracle游标介绍: --声明游标 CURSOR cursor_name IS select_statement --For 循环游标 --()定义游标 --()定义游标变量 --()使用for循环 ...
- [转载]Oracle 游标使用全解
这个文档几乎包含了oracle游标使用的方方面面,全部通过了测试 -- 声明游标:CURSOR cursor_name IS select_statement --For 循环游标--(1)定义游标- ...
随机推荐
- java线程池ThreadPool
package com.java.concurrent; import java.util.concurrent.ExecutorService; import java.util.concurren ...
- java注解(Annotation)
本文转载自http://www.cnblogs.com/xdp-gacl/p/3622275.html 一.认识注解 注解(Annotation)很重要,未来的开发模式都是基于注解的,JPA是基于注解 ...
- js实现小球的弹性碰撞。
前 言 MYBG 小编最近在做自己的个人网站,其中就用到了一个小球碰撞检测的功能,想自己写,无奈本人能力不足啊(毕竟还是一个菜鸟)!!就想着找个插件用一下也好,可是找了好久也没有找到一个比较好用 ...
- Input类型是checkbox时checked属性获取
记录一下checkbox 的 checked 属性的获取办法,以备忘记: 假如你的一个HTML页中有这么一段代码: <input name="chbRem" id=" ...
- C语言 第三章 关系、逻辑运算与分支流程控制
目录 一.关系运算 二.逻辑运算 三.运算优先级 四.if语句 4.0.代码块 4.1.单if语句 4.2.if else 4.3.多重if 4.4.?号:号表达式 五.switch语句 一.关系运算 ...
- 2017/10/10 jar包错误
Description Resource Path Location Type Archive for required library: 'WebContent/WEB-IN ...
- 激光相机数据融合(3)--KITTI数据集
KITTI数据集提供了双目图像,激光数据,和imu/gps位置信息,其中还包括了大量的算法.下载地址为:http://www.cvlibs.net/datasets/kitti/raw_data.ph ...
- 从零一起学Spring Boot之LayIM项目长成记(五)websocket
前言 距离上一篇已经比较久的时间了,项目也是开了个头.并且,由于网上的关于Spring Boot的websocket讲解也比较多.于是我采用了另外的一个通讯框架 t-io 来实现LayIM中的通讯功能 ...
- 对java泛型的理解
正确的应用java泛型的特性可以更好的实现编程的开闭原则(对扩展开放,对修改关闭),这得益于java泛型提供的在程序运行时获取对象声明类型的特性. 静态语言的特性是在程序编译前进行声明,这样程序在编译 ...
- IIFE(立即执行函数表达式)
我们经常会看到这样的写法: ;(fuction () { // do something })() 这就是一个简单的IIFE(立即执行函数表达式,immediately-invoked functio ...