游标的操作(一)(本文适合全部读完而非查找某一信息)

10人阅读 评论(0) 收藏 举报
分类:

SQL是面向集合的,一条SQL语句可以产生或处理多条记录。

主语言是面向记录的,一组主变量只能存放一条记录。

所以仅使用朱变量并不能完全满足SQL语句向应用程序输出数据的要求,为此嵌入式SQL引入了游标的概念。


游标(cursor):系统为用户开设了一个数据缓冲区,存放SQL语句的执行结果,每个游标区都有一个名字。用户可以通过游标逐一获取记录,并付给主变量,交由主语言进一步处理。游标分为显示游标和隐式游标,重点说显示游标。


这里不说游标与主语言的连接,只说游标的操作形式。

  1. 定义游标:将游标名与SQL查询结果相关联
  2. 打开游标:激活游标指针,指向缓冲区首部
  3. 提取当前结果到SQL变量中:将当前结果提取到主变量中,游标指针下移
  4. 关闭游标:断开关联,释放缓冲区空间

具体说游标操作之前,我们要先将查询结果列出,以用于select语句内容:

declare 
  v_deptid departments.department_id % type;
  v_dname departments.department_name % type;  
意义为:定义变量 v_deptid 与 v_dname,其属性类型与 department 中的 department_id 和 department_name 的类型相同。%type为关键字
下面给出部分属性表:
属性表及其描述
游标属性描述
游标名 % ISOPEN   值为bool型,若游标已打开,取值为TRUE
游标名 % NOTFOUND值为bool型,如果最近一次fetch操作没有返回结果,则取值为TRUE
游标名 % FOUND值为bool型,如果最近一次fetch操作没有返回结果,则取值为FALSE,反之为TRUE
游标名 % ROWCOUNT值为number型,值是到当前为止返回的记录数


定义游标:

cursor 游标名[(参数名1 数据类型),......]   is  select   语句;

例如:

cursor C1 is select empolyee_id, department_id from empolyees;
完整写下来就是:
declare: 
   v_deptid departments.department_id % type;
   v_dname departments.department_name % type;
cursor c_dept is select * from departments      --游标c_dept与查询结果相关联
where department_id = v_deptid and department_name = v_dname;
按理说,现在的v_deptid是没有意义的,因为作为一个变量,他没有任何值,所以我们要赋值:
declare v_deptid departments.department_id % type:=&p_deptid;

这里的p_deptid 是已经定义好的变量,需要输入值。&用法请见点击打开链接


打开游标:

open 游标名[(实际参数值1),.........]

例如:

open C1;

这项简单不必多说。


取值到变量:

fetch 游标名 into 变量1 [变量2······];

或:fetch 游标名 into PL/SQL_RECORD;

与select语句中列的数据类型,前后顺序要一致。


关闭游标:

close 游标名;

例如:

close C1;

不赘述。

实例以及更多内容请看:游标的操作(二)



查看评论

取emp表中5个人的所有信息(用游标和for循环)

alter user scott account unlock; alter user scott identified by tiger; conn scott/tiger SET serve...
  • u011329762
  • u011329762
  • 2014-07-08 15:30:56
  • 338

游标的使用方法

游标的学习 1. 声明游标就是为了定义一个游标名称来对应一条查询语句,然后对这个查询结果集进行单行操作 声明语句在单个使用的时候需要在declare子句中进行,在存储过程中便是...
  • newMyStyle
  • newMyStyle
  • 2016-01-14 23:25:49
  • 2854

简述游标的使用

游标的使用可以简单归类为5个步骤: 1.定义游标 2.打开游标 3.使用游标 4.关闭游标 5.释放游标 如下是游标简单实用的示例: --1.定义游标 DECLARE test_...
  • Wikey_Zhang
  • Wikey_Zhang
  • 2017-07-10 12:10:15
  • 630

数据库之【游标使用详解篇】

***************************** 数据库之游标使用详解篇 ***************************** 游标(Cursor):用来查询数据库,...
  • next_sun
  • next_sun
  • 2012-04-10 23:30:24
  • 2241

SQL游标的使用详解

  • 2010年08月13日 15:51
  • 49KB
  • 下载

ORA-01000: 超出打开游标的最大数 问题的分析和解决

在java代码中,执行conn.createStatement()和conn.prepareStatement()的时候,实际上都是相当与在数据库中打开了一个cursor。尤其是,如果你的create...
  • hongtea1234
  • hongtea1234
  • 2016-01-06 16:31:41
  • 2309

Oracle数据库--实用操作(4)游标

游标简介 原理:逐行处理查询结果,以编程的方式访问数据 应用场景:在代码中需要接收多行查询出来的记录,借助游标遍历结果集。常与过程一起使用。 游标的类型: 一、隐式游标       在PL...
  • ljheee
  • ljheee
  • 2016-04-11 20:26:42
  • 1184

oracle超出打开游标的最大数的原因和解决方案

  • 2014年07月14日 16:04
  • 4KB
  • 下载

游标基本结构及属性(cursor)

游标分类 显式游标:使用cursor语句显式定义游标,游标被定义后,需要打开并提取游标,关闭游标。 隐式游标:由oracle为每一个dml语句创建一个隐式游标也叫做SQL游标。 BEGIN up...
  • wuxbeyond
  • wuxbeyond
  • 2013-11-19 15:39:02
  • 1754

Oracle: ORA-01000: 超出打开游标的最大数问题及解决办法

java.sql.SQLException: ORA-01000: 超出打开游标的最大数ORA-01000: 超出打开游标的最大数ORA-06512: 在"SYS.DBMS_LOB", line 52...
  • shenzhen_mydream
  • shenzhen_mydream
  • 2010-07-11 14:19:00
  • 20703
    个人资料
    等级:
    访问量: 2782
    积分: 142
    排名: 113万+
    文章存档
    最新评论