使用游标批量更新/填充数据库(The Using of Cursor)

原创 2004年09月28日 15:18:00

Author:David Euler
Date: 2004/09/28
Email:de_euler-david@yahoo.com.cn

有任何问题,请与我联系:)

数据库测试中,常常需要对数据库中的表进行填充或者批量更改数据的操作,可以通过游标来实现对每一个查询记录的操作,通过rand()函数的使用获得随机数,将随机数插入到表中,即可更新或填充数据表。

这里涉及到游标的使用,使用游标大体需要经过以下几个步骤:
1.定义游标:declare cursor
2.打开游标:open cursor
3.取得游标中单个的记录,并将记录中的字段赋值给变量。fetch cursor
   (每取一个值,游标会自动前移)
4.循环读取游标,并对每一个记录进行处理。fetch与fetch next 是等价的。
5.关闭并释放游标,close cursor, deallocate cursor。


下面给出一个批量更改数据库中记录的例子,这个例子把价目表中所有料品的价格用0到100之间的数值更新,原价目表中所有料品的价格都为0,更新之后所有的价格都是0到100之间的随机数:

use GuruERP

-- 定义游标MyTestCursor:
declare  MyTestCursor cursor
for select PGI_ITM_CODE,PGI_ListPrice from TBLPRICELISTGROUPITEM 
/*从表中选取两个字段*/
/* 表TBLPRICELISTGROUPITEM中的字段PGI_ITM_CODE是Unique Key  */

-- 打开游标MyTestCursor:
open MyTestCursor

declare @PGI_ITM_CODE char(28)
declare @PGI_ListPrice float

--fetch取出游标所指的记录,并将记录结果存入到变量中:
fetch from MyTestCursor into @PGI_ITM_CODE,@PGI_ListPrice


/*****************  begin of loop *******************************/
while @@FETCH_STATUS = 0
Begin 
update TBLPRICELISTGROUPITEM set PGI_ListPrice=floor(100*rand()) where PGI_ITM_CODE=@PGI_ITM_CODE
fetch next from MyTestCursor into @PGI_ITM_CODE,@PGI_ListPrice
End   
/*****************  end of loop *******************************/

select  @PGI_ITM_CODE as code ,@PGI_ListPrice as price

/***********关闭游标,释放游标:***************/
close MyTestCursor
deallocate MyTestCursor

再重复一下,使用游标批量更改或填充数据库,大体经过declare,open,fetch,loop fetch,close and deallocate 五个步骤。

备注1:
       while循环体以BEGIN开始,以END结束,当条件为真时循环继续,为假则结束
备注2:
       @@FETCH_STATUS是sql server中的一个变量,下面是SQL  server Books online上的解释:

Returns the status of the last cursor FETCH statement issued against any cursor currently opened by the connection.

Return value Description
0 FETCH statement was successful.
-1 FETCH statement failed or the row was beyond the result set.
-2 Row fetched is missing.
Examples

This example uses @@FETCH_STATUS to control cursor activities in a WHILE loop.

DECLARE Employee_Cursor CURSOR FOR
SELECT LastName, FirstName FROM Northwind.dbo.Employees
OPEN Employee_Cursor
FETCH NEXT FROM Employee_Cursor
WHILE @@FETCH_STATUS = 0
BEGIN
   FETCH NEXT FROM Employee_Cursor
END
CLOSE Employee_Cursor
DEALLOCATE Employee_Cursor

使用游标批量更新/填充数据库(The Using of Cursor)

Author:David EulerDate: 2004/09/28Email:de_euler-david@yahoo.com.cn 有任何问题,请与我联系:)数据库测试中,常常需要对数据库中的表进...
  • vipxiaotian
  • vipxiaotian
  • 2007年08月24日 00:45
  • 926

数据库中cursor游标的概念

游标(cursor)   游标是系统为用户开设的一个数据缓冲区,存放SQL语句的执行结果   每个游标区都有一个名字   用户可以用SQL语句逐一从游标中获取记录,并赋给主变量,交由...
  • yxwb1253587469
  • yxwb1253587469
  • 2016年08月19日 11:29
  • 6211

Android 使用SQLite数据库使用Cursor(游标)来进行操作

Android 使用的数据库是SQLite数据库,对于数据库记录的操作,可以使用Cursor(游标)来进行。 1. 关于 Cursor 在你理解和使用 Android Cursor 的时候...
  • GuodongSun0
  • GuodongSun0
  • 2015年05月01日 09:27
  • 3127

PB中游标的使用 DECLARE CURSOR FETCH

  //定义游标DECLARE C1 CURSOR FOR//取值select aln_cd,sum(cargo_aln_fare)  from fare_daily_view where aln_c...
  • tisnly
  • tisnly
  • 2007年12月17日 11:48
  • 16105

Cursor游标(光标)的使用

游标-----内存中的一块区域,存放的是select 的结果          游标用来处理从数据库中检索的多行记录(使用SELECT语句)。利用游标,程序可以逐个地处理和遍历一次检索返回的整个记...
  • u010923921
  • u010923921
  • 2015年05月03日 12:48
  • 930

Python数据库操作、Python DB API、数据库连接对象connection、数据库游标对象cursor

学习连接地址:点击打开 1.Python DB API Python DB API包含: 数据库连接对象:connection 数据库交互对象:cursor 数据库异常类:excepti...
  • qq_18407565
  • qq_18407565
  • 2017年06月21日 23:43
  • 529

Mybatis 调用多游标参数存储过程 Mybatis Oracle Procedure multi cursor

网上关于Mybatis调用多游标参数存储过程的例子很省
  • juxingliang1986
  • juxingliang1986
  • 2014年05月15日 11:56
  • 1812

Postgresql 游标使用

游标37.8. 游标如果不想一次执行整个命令,可以设置一个封装该命令的游标,然后每次读取几行命令结果。这么干的一个原因是在结果包含数量非常大的行时避免内存耗尽。不过 PL/pgSQL 用户不必担心这个...
  • xianyiqi
  • xianyiqi
  • 2009年03月05日 15:46
  • 9848

SQLServer游标(Cursor)简介和使用说明 及全局变量说明和功能

游标(Cursor)是处理数据的一种方法,为了查看或者处理结果集中的数据,游标提供了在结果集中一次以行或者多行前进或向后浏览数据的能力。我们可以把游标当作一个指针,它可以指定结果中的任何位置,然后允许...
  • zzy7075
  • zzy7075
  • 2015年01月02日 10:59
  • 7546

ASP的Recordset对象方法 RecordsetCursors:选择正确的游标

Recordset对象方法 Open方法 recordset.Open Source,ActiveConnection,CursorType,LockType,Options Source Recor...
  • lcfgaoyong
  • lcfgaoyong
  • 2006年05月10日 20:56
  • 1539
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用游标批量更新/填充数据库(The Using of Cursor)
举报原因:
原因补充:

(最多只允许输入30个字)