实验12游标的使用Word格式文档下载.docx
《实验12游标的使用Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《实验12游标的使用Word格式文档下载.docx(11页珍藏版)》请在冰豆网上搜索。
FROMCPXSB销售日朗-’2004-3-g5
FORREADOHLY
OPENCUR1
FETCHfiEXTFROMCURl
产品購号客户编号
销售日期較量销售额
(2)使用T-SQL扩展声明一滚动动态游标CUR2:
要求结果集为客户信息,并能通过该游标修改客户名称列。
DECLAREcm2CURSOR
LOCALSCROLL
DyWMK
FORSELECT*
FROMKSS
FORUPDATEOF客户名称
|<
Imi
昭令已嚴功完成$
12.2、打开游标
打开CUR2游标。
1
OPEKTCBR2
命令已成劝完成"
12.3、读取游标中数据
编写程序,实现依次读取游标CUR2中各行数据。
SQL语句:
DECLARE@客户编号char⑹,
@客户名称char(30),
@地区char(10),
@负责人char(8),
@电话char(12)
print'
游标结果集中的记录总数为’+cast(@@cursor_rowsasvarchar(10))fetchnext
fromCUR2
into@客户编号,@客户名称,@地区,@负责人,@电话
while@@fetch_status=0
begin
客户编号:
'
+cast(@§
户编号ascha^6))
+'
客户名称:
户名称aschar(30))
地区:
+cast(@tt区aschar(10))
负责人:
+cast(@负责人aschar(8))
电话:
+cast(@电话aschar(12))
fetchnext
into@客户编号,@客户名称,@地区,@负责人,@电话
end
DECLARE嗨户辑号char(6),户茗称char(3D),chari10)j倉负责A,charEJ,@电话char-12.)
print"
游标结果集中的记录i-casti'
Sacursot-rowsasvarchar1ID))
fetchnext
mto诸户編号,瞎户名称』@1也区,©
負责人,您电话
whileetch_stat-us^O
begin
客户辐r号;
’+匚户编号aschar⑹
客户名称:
诡客户茗称ascharf301)
+J地区;
+ua航@d电区ascharID))
+?
'
+cast迤负责人agchar(8))
电Si'
+c^st谑电话S3char(12))
fetchneict
mto礪户编号;
略户名称,血也应遗负责人0电话
dM;
游标结愚集中的花寿
客户堀号:
0000031
蓉户iB<
:
OOOOCW,—F「一
蓉户^-1:
000005容户名称:
广电公司
JU
海壕妄南京地区:
南京
汪五
赵六
张三
5333333333
电话;
6666666閃6
电话;
1111111122
12.4、关闭游标
释放CUR2游标
deallocaItecur?
【实验练习】
编写程序,用游标实现从CP表中读取产品编号、产品名称和价格,并将价格在1000-3000(不包含1000和3000)之间的产品名称和价格输出。
DECLARE粗产品绢号匚码产品名称char戈0),(&
价格float血
游标錨果集申的记亲总数为‘+伽妣(碗umaisvarchar(8)1fetchntxt
fromCUR3
into蜡品编号一沪品名超劭格
vhileetch_statD
b弼讪
prirrt'
产品绢号:
T+cast:
铲7品编号aschar(S)
匸产晶富称:
n+ca»
t(flFft名称aschar(30>
价格:
’+casli您价梅aschar13))
fel
^romCtIR.3
irrto@产晶编寻.品畧称,曲1■格
价榕:
1800
价格熄31口价■格:
1590
【分析与回答】
1什么是游标?
为什么要使用游标?
在数据库中,游标是一个十分重要的概念。
游标提供了一种对从表中检索出的数据进行操作的灵活手段,就本质而言,游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。
游标总是与一条T_SQL选择语句相关联因为游标由结果集(可以是零条、一条或由相关的选择语句检索出的多条记录)和结果集中指向特定记录的游标位置组成。
当决定对结果集进行处理时,必须声明一个指向该结果集的游标。
如果曾经用C语言写过对文件进行处理的程序,那么游标就像您打开文件所得到的文件句柄一样,只要文件打开成功,该文件句柄就可代表该文件。
对于游标而言,其道理是相同的。
可见游标能够实现按与传统程序读取平面文件类似的方式处理来自基础表的结果集,从而把表中数据以平面文件的形式呈现给程序。
关系数据库管理系统实质是面向集合的,在MSSQLSERVER中并没有一种描述表中单一记录的表达形式,除非使用where子句来限制只有一条记录被选中。
因此我们必须借助于游标来进行面向单条记录的数据处理。
由此可见,游标允许应用程序对查询语句select返回的行结果集中每一行进行相同或不同的操作,而不是一次对整个结果集进行同一种操作;
它还提供对基于游标位置而对表中数据进行删除或更新的能力;
而且,正是游标把作为面向集合的数据库管理系统和面向行的程序设计两者联系起来,使两个数据处
理方式能够进行沟通。
2•对游标的操作语句有哪些?
分别代表什么含义?
答:
游标种类
MSSQLSERVER支持三种类型的游标:
Transact_SQL游标,API服务器游标和客户游标。
\
(1)Transact_SQL游标
Transact_SQL游标是由DECLARECURSOR语法定义、主要用在/Transact_SQL脚本、存储过程和触发器中。
Transact_SQL游标主要用在服务器上,由从客户端发送给服务器的Transact_SQL语句或是批处理、存储过程、触发器中的iTransact_SQL进行管理。
Transact_SQL游标不支持提取数据块或多行数据。
(2)API游标
API游标支持在OLEDB,ODBC以及DB」ibrary中使用游标函数,
主要用在服务器上。
每一次客户端应用程序调用API游标函数,MSSQL
SEVER的OLEDB提供者、ODBC驱动器或DB」ibrary的动态链接库
(DLL)都会将这些客户请求传送给服务器以对API游标进行处理。
(3)客户游标
客户游标主要是当在客户机上缓存结果集时才使用。
在客户游标中,有一个缺省的结果集被用来在客户机上缓存整个结果集。
客户游标仅支持静态游标而非动态游标。
由于服务器游标并不支持所有的Transact-SQL语
句或批处理,所以客户游标常常仅被用作服务器游标的辅助。
因为在一般情况下,服务器游标能支持绝大多数的游标操作。
由于API游标和Transact-SQL游标使用在服务器端,所以被称为服务器游标,也被称为后台游标,而客户端游标被称为前台游标。
在本章中我们主要讲述服务器(后台)游标。
selectcount(id)frominfo
select*frominfo
--清除所有记录
truncatetableinfo
declare@iint
set@i=1
while@i<
1000000
begin
insertintoinfovalues('
Justin'
+str(@i),深圳'
+str(@i))
set@i=@i+1
游标操作
使用游标有四种基本的步骤:
声明游标、打开游标、提取数据、关闭游标。
声明游标
象使用其它类型的变量一样,使用一个游标之前,首先应当声明它。
游标的声明包括两个部分:
游标的名称;
这个游标所用到的SQL语句。
如要声明一个叫作Cus-tomerCursor的游标用以查询地址在北京的客户的姓名、帐号及其余额,您可以编写如下代码:
DECLARECustomerCursorCURSORFOR
SELECTacct_no,name,balanee
FROMcustomer
WHEREprovince="
北京"
;
在游标的声明中有一点值得注意的是,如同其它变量的声明一样,声明游标的这一段代码行是不执行的,您不能将debug时的断点设在这一代码行上,也不能用IF...ENDIF语句来声明两个同名的游标,如下列的代码就是错误的。
IFls_prov="
THEN/
ELSE
WHEREprovince<
>
"
ENDIF
打开游标
声明了游标后在作其它操作之前,必须打开它。
打开游标是执行与其相
关的一段SQL语句,例如打开上例声明的一个游标,我们只需键入:
OPENCustomerCursor;
由于打开游标是对数据库进行一些SQLSELECT的操作,它将耗费一段时间,主要取决于您使用的系统性能和这条语句的复杂程度。
如果执行的时间较长,可以考虑将屏幕上显示的鼠标改为hourglass
提取数据
当用OPEN语句打开了游标并在数据库中执行了查询后,您不能立即利用在查询结果集中的数据。
您必须用FETCH语句来取得数据。
一条FETCH语句一次可以将一条记录放入程序员指定的变量中。
事实上,FETCH语句是游标使用的核心。
在DataWindow和DataStore中,执行了Retrieve。
函数以后,查询的所有结果全部可以得到;
而使用游标,我们只能逐条记录地得到查询结果。
已经声明并打开一个游标后,我们就可以将数据放入任意的变量中。
在FETCH语句中您可以指定游标的名称和目标变量的名称。
如下例:
FETCHCustmerCur-sor
INTO:
ls_acct_no.
ls_name,
ll_balanee;
从语法上讲,上面所述的就是一条合法的取数据的语句,但是一般我们
使用游标却还应当包括其它的部分。
正如我们前面所谈到的,游标只能一次