友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!阅读过程发现任何错误请告诉我们,谢谢!! 报告错误
一世书城 返回本书目录 我的书架 我的书签 TXT全本下载 进入书吧 加入书签

SQL 21日自学通(V3.0)(PDF格式)-第68章

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!






好处 



    下边是创建  使用和关闭数据库游标的例子 



    1。 Create the cursor。 



    2。 Open the cursor for use within the procedure or application。 



                                                                             261 


…………………………………………………………Page 262……………………………………………………………

SQL 21  日自学通(V1。0)                                                       翻译人    笨猪 



    3。 Fetch a record's data one row at a time until you have reached the end of the cursor's records。 



    4。 Close the cursor when you are finished with it。 



    5。 Deallocate the cursor to pletely discard it。 



创建游标 



    如果使用 Transcat…SQL 来创建游标            其语法如下 



SYNTAX 



    declare cursor_name cursor 



              for  select_statement 



         'for {read only | update 'of column_name_list'}' 



    使用 ORACLE7  的 SQL 来创建和语法格式则如下 



SYNTAX 



    DECLARE cursor_name CURSOR 



              FOR  {SELECT  mand  |  statement_name  |  block_name} 



    在执行 DECLARE  cursor_name  CURSOR  语句时           你必须同时定义将要在你的所有的 



游标操作中使用的结果集              一个游标有两个重要的部分  游标结果集和游标的位置 



    下边的语句将创建一个基于 ARTIST 表的结果集 



INPUT 



    1》 create Artists_Cursor cursor 



    2》 for select * from ARTISTS 



    3》 go 



分析 



    你现在已经有了一个名字为 ARTIST_Cursor 游标  它包括了所有的 ARTIST 表的内容 



但是首先你必须打开游标 



打开游标 



    最简单的打开游标命令如下 



SYNTAX: 



    open cursor_name 



                                                                                 262 


…………………………………………………………Page 263……………………………………………………………

SQL 21  日自学通(V1。0)                                                            翻译人     笨猪 



     运行下列命令打开 ARTIST_Cursor 游标 



     1》 open Artists_Cursor 



     2》 go 



     现在你可以使用游标来翻阅结果集了 



使用游标来进行翻阅 



     要想在游标结果集中进行翻阅操作  Transcat…SQL 提供了 FETCH 命令 



SYNTAX 



     fetch cursor_name 'into fetch_target_list' 



     ORACLE SQL 则提供了下边的语法 



         FETCH cursor_name {INTO : host_variable 



                   ''INDICATOR' : indicator_variable' 



                         ';      :  host_variable 



                         ''INDICATOR' : indicator_variable' '。。。 



                   |  USING  DESCRIPTOR  descriptor } 



     每次当 FETCH  命令运行时             游标指针的好处是每次可以在结果集中移动一行                              如果 



需要  移动到行的数据可以被填充到 fetch_target_list 变量中 



注  Transcat…SQL  允许程序员通过下边的命令来实现一次移动多行 



       set cursor rows number for cursor_name 



     该命令不能使用 INTO  子句               但是     当向前跳动的行数已知时用它来代替重复执行 



FETCH 命令则很有用 



     下边的语句将从 ARTIST_Cursor 的结果集中获得数据并把它返回给程序变量 



INPUT 



     1》 declare @name char(30) 



     2》 declare @homebase char(40) 



     3》 declare @style char(20) 



     4》 declare @artist_id int 



     5》 fetch Artists_Cursor into @name; @homebase; @style; @artist_id 



     6》 print @name 



                                                                                       263 


…………………………………………………………Page 264……………………………………………………………

SQL 21  日自学通(V1。0)                                                         翻译人    笨猪 



    7》 print @homebase 



    8》 print @style 



    9》 print char(@artist_id) 



     10》 go 



    你可以使用 WHILE         循环来循环查看整个结果集  但是你是如果知道已经到达了最后 



一个记录的呢 



测试游标的状态 



    Transcat…SQL  可以让你在任何时候通常维护                 @@sqlstatus  和  @@rowcount   这两个全 



局变量来检查当前游标的状态 



    变量@@sqlstatus    返回最后一次运行 FETCH  语句的状态信息                      Transcat…SQL  规定除 



了 FETCH 命令以外其他的命令不得修改                    @@sqlstatus  变量    该变量可以取下表三个值中 



的一个  下表是在 Transcat…SQL  参考手册中给出的 



Status       Meaning 

0            Successful pletion of the FETCH statement。 



1            The FETCH statement resulted in an error。 



2            There is no more data in the result set。 



    而变量      @@rowcount 则返回上次一 FETCH 命令设置的行号                    你可以用它来确定当前 



游标结果集的行数 



    下边的代码给出了 FETCH 命令的扩充使用方法                        你现在可以使用 While  Loop  命令和 



变量@@sqlstatus 来翻阅当前的游标 



INPUT 



     1》 declare @name char(30) 



    2》 declare @homebase char(40) 



    3》 declare @style char(20) 



    4》 declare @artist_id int 



    5》 fetch Artists_Cursor into @name; @homebase; @style; @artist_id 



    6》 while (@@sqlstatus = 0) 



    7》 begin 



    8》            print  @name 



                                                                                   264 


…………………………………………………………Page 265……………………………………………………………

SQL 21  日自学通(V1。0)                                                            翻译人     笨猪 



     9》            print  @homebase 



     10》          print  @style 



     11》          print  char(@artist_id) 



     12》          fetch  Artists_Cursor  into  @name;  @homebase;  @style;  @artist_id 



     13》 end 



     14》 go 



分析 



     现在你已经有了一个全功能的游标                     下边要做的工作就是关闭游标 



关闭游标 



     关闭游标是一个非常简单的工作  它的语句如下 



SYNTAX 



     close cursor_name 



     这时游标依然存在            但是     它必须被再次打开方可使用  关闭一个游标从本质上来说 



是关闭了它的结果集              而并不是它的全部内容  如果你已经完全结束了对一个游标的使用 



的话  DEALLOCATE  命令将释放让游标所占用的内存并且可以让游标的名字可以被再次 



使用     这是该命令的语法格式 



SYNTAX 



     deallocate cursor cursor_name 



     例 13。4 给出了用 Transcat…SQL  写的创建  使用               关闭  释放一个游标的完整过程 



    Example 13。4 



     INPUT 



     1》 declare @name char(30) 



    2》 declare @homebase char(40) 



     3》 declare @style char(20) 



    4》 declare @artist_id int 



     5》 create Artists_Cursor cursor 



     6》 for select * from ARTISTS 



     7》 open Artists_Cursor 



                                                                                       265 


…………………………………………………………Page 266……………………………………………………………

SQL 21  日自学通(V1。0)                                                          翻译人     笨猪 



     8》 fetch Artists_Cursor into @name; @homebase; @style; @artist_id 



     9》 while (@@sqlstatus = 0) 



     10》 begin 



     11》            print  @name 



     12》            print  @homebase 



     13》            print  @style 



     14》            print char(@artist_id) 



     15》            fetch  Artists_Cursor  into  @name;  @homebase;  @style;  @artist_id 



     16》 end 



     17》 close Artists_Cursor 



     18》 deallocate cursor Artists_Cursor 



     19》 go 



     注   下边是示例所用的数据 



OUTPUT: 



Soul Asylum                Minneapolis          Rock              1 

Maurice Ravel              France               Classical         2 

Dave Matthews Band         Charlottesville      Rock              3 

Vince Gill                 Nashville            Country           4 

Oingo Boingo               Los Angeles          Pop               5 

Crowded House              New Zealand          Pop               6 

Mary Chapin…Carpenter      Nashville            Country           7 

Edward MacDowell           U。S。A。               Classical         8 



游标的适用范围 



     与表  索引以及其它的对象如触发机制和存贮过程不同  游标在创
返回目录 上一页 下一页 回到顶部 0 0
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!