|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
MySQL是一个开放源码的小型关联式数据库管理系统,开发者为瑞典MySQLAB公司。目前MySQL被广泛地应用在Internet上的中小型网站中。数据|游标
Author:DavidEuler
Date:2004/09/28
Email:de_euler-david@yahoo.com.cn
有任何成绩,请与我接洽:)
数据库测试中,经常必要对数据库中的表举行添补大概批量变动数据的操纵,能够经由过程游标来完成对每个查询纪录的操纵,经由过程rand()函数的利用取得随机数,将随机数拔出到表中,便可更新或添补数据表。
这里触及到游标的利用,利用游标大致必要经由以下几个步骤:
1.界说游标:declarecursor
2.翻开游标:opencursor
3.获得游标中单个的纪录,并将纪录中的字段赋值给变量。fetchcursor
(每取一个值,游标会主动前移)
4.轮回读取游标,并对每个纪录举行处置。fetch与fetchnext是等价的。
5.封闭并开释游标,closecursor,deallocatecursor。
上面给出一个批量变动数据库中纪录的例子,这个例子把价目表中一切料品的代价用0到100之间的数值更新,原价目表中一切料品的代价都为0,更新以后一切的代价都是0到100之间的随机数:
useGuruERP
--界说游标MyTestCursor:
declareMyTestCursorcursor
forselectPGI_ITM_CODE,PGI_ListPricefromTBLPRICELISTGROUPITEM
/*从表当选取两个字段*/
/*表TBLPRICELISTGROUPITEM中的字段PGI_ITM_CODE是UniqueKey*/
--翻开游标MyTestCursor:
openMyTestCursor
declare@PGI_ITM_CODEchar(28)
declare@PGI_ListPricefloat
--fetch掏出游标所指的纪录,并将纪录了局存进到变量中:
fetchfromMyTestCursorinto@PGI_ITM_CODE,@PGI_ListPrice
/*****************beginofloop*******************************/
while@@FETCH_STATUS=0
Begin
updateTBLPRICELISTGROUPITEMsetPGI_ListPrice=floor(100*rand())wherePGI_ITM_CODE=@PGI_ITM_CODE
fetchnextfromMyTestCursorinto@PGI_ITM_CODE,@PGI_ListPrice
End
/*****************endofloop*******************************/
select@PGI_ITM_CODEascode,@PGI_ListPriceasprice
/***********封闭游标,开释游标:***************/
closeMyTestCursor
deallocateMyTestCursor
再反复一下,利用游标批量变动或添补数据库,大致经由declare,open,fetch,loopfetch,closeanddeallocate五个步骤。
备注1:
while轮回体以BEGIN入手下手,以END停止,当前提为真时轮回持续,为假则停止
备注2:
@@FETCH_STATUS是sqlserver中的一个变量,上面是SQLserverBooksonline上的注释:
ReturnsthestatusofthelastcursorFETCHstatementissuedagainstanycursorcurrentlyopenedbytheconnection.
ReturnvalueDescription0FETCHstatementwassuccessful.-1FETCHstatementfailedortherowwasbeyondtheresultset.-2Rowfetchedismissing.
Examples
Thisexampleuses@@FETCH_STATUStocontrolcursoractivitiesinaWHILEloop.
DECLAREEmployee_CursorCURSORFORSELECTLastName,FirstNameFROMNorthwind.dbo.EmployeesOPENEmployee_CursorFETCHNEXTFROMEmployee_CursorWHILE@@FETCH_STATUS=0BEGINFETCHNEXTFROMEmployee_CursorENDCLOSEEmployee_CursorDEALLOCATEEmployee_Cursor
根据Ambrose所说,Sakila来自一种叫SiSwati的斯威士兰方言,也是在Ambrose的家乡乌干达附近的坦桑尼亚的Arusha的一个小镇的名字。 |
|