数据库原理与应用(SQL Server)笔记 第十一章 游标
目錄
- 前言
- 一、游標的定義
- 二、游標的聲明
- 三、游標的打開
- 四、游標的使用
- 五、游標的關閉
- 六、游標的刪除
- 七、靜態(tài)游標和動態(tài)游標
- 結語
前言
本章內容將從六個方面介紹關于游標的知識,分別是其定義、聲明、打開、使用、關閉、刪除,另外還會介紹靜態(tài)游標和動態(tài)游標。
一、游標的定義
當對由SELECT語句返回的結果集中的某一行或部分行進行單獨處理時,就要用到一種擴展,也就是游標,游標提供了對一個結果集進行逐行處理的能力。
游標可以保存查詢結果,方便下文調用,因為使用游標會保存數(shù)據(jù)行的副本,在創(chuàng)建游標后,下文查詢即可從副本中查詢,比直接查數(shù)據(jù)庫快很多。
二、游標的聲明
游標包括兩部分,一是游標結果集,即是由SELECT語句返回的結果集的集合,二是游標當前行指針,即指向該結果集中某一行的指針。
聲明游標使用DECLARE CURSOR語句,格式如下:
三、游標的打開
當游標被打開時,其游標位置位于第一行。
打開游標使用OPEN語句,格式如下:
四、游標的使用
使用FETCH語句使游標來提取數(shù)據(jù),格式如下:
FETCH NEXT/PRIOR/FIRST/LAST/RELATIVE n/ABSOLUTE n FROM (GLOBAL)<游標的名稱> (INTO <變量的名稱>) /*INTO表示將讀取的游標數(shù)據(jù)存放到指定的變量中,后跟變量的名稱*/這里的NEXT/PRIOR/FIRST/LAST/RELATIVE n/ABSOLUTE n用于表示游標讀取數(shù)據(jù)的位置。
(1)NEXT表示讀取游標中當前行的下一行,且將其作為當前行;
(2)PRIOR表示讀取游標中當前行的前一行,且將其作為當前行;
(3)FIRST表示讀取游標中的第一行,且將其作為當前行;
(4)LAST表示讀取游標中的最后一行,且將其作為當前行;
(5)RELATIVE n表示讀取游標的當前行的前或后n行,若n>0,則讀取游標當前行起向后的第n行數(shù)據(jù),若n<0,則讀取游標當前行起向前的第n行數(shù)據(jù),且將其作為當前行;
(6)ABSOLUTE n表示讀取游標從第一行或最后一行開始的第n行,若n>0,則讀取從結果集的第一行(包括第一行)起向后的第n行,若n<0,則讀取從結果集的最后一行起向前的第n行,且將其作為當前行。
五、游標的關閉
關閉游標使用CLOSE語句,格式如下:
CLOSE <游標的名稱>六、游標的刪除
在關閉游標后,要釋放其占用的系統(tǒng)空間,刪除游標使用DEALLOCATE語句,格式如下:
DEALLOCATE <游標的名稱>例1、根據(jù)下表信息,在數(shù)據(jù)庫Sales中,定義一個游標CURSOR_0求商品信息表第一行的商品信息。
> sql語句:
USE Sales DECLARE CURSOR_0 CURSOR FOR SELECT* FROM Product OPEN CURSOR_0 FETCH NEXT FROM CURSOR_0 CLOSE CURSOR_0 DEALLOCATE CURSOR_0
例2、根據(jù)信息,在數(shù)據(jù)庫Sales中,定義一個游標CURSOR_3求銷售員信息表員工的工號、姓名、性別、住址、電話信息。
這里使用了WHILE語句,其條件表達式中采用的@@FETCH_STATUS函數(shù)返回上一條游標FETCH語句的狀態(tài),當返回值為0,循環(huán)繼續(xù)進行,否則退出循環(huán),從而達到求銷售員信息表的員工信息。
sql語句:USE Sales DECLARE @SaleID char(3),@Salename varchar(20),@Sex char(2), @Address varchar(60),@Telephone varchar(20) DECLARE CURSOR_3 CURSOR FOR SELECT SaleID,Salename,Sex,Address,Telephone FROM Seller OPEN CURSOR_3 FETCH NEXT FROM CURSOR_3 INTO @SaleID,@Salename,@Sex,@Address,@Telephone PRINT '工號 姓名 性別 住址 電話' PRINT '-------------------------------------------' WHILE @@FETCH_STATUS=0 BEGIN PRINT @SaleID+' '+@Salename+' '+@Sex+' '+@Address+' '+@Telephone FETCH NEXT FROM CURSOR_3 INTO @SaleID,@Salename,@Sex,@Address,@Telephone END CLOSE CURSOR_3 DEALLOCATE CURSOR_3
七、靜態(tài)游標和動態(tài)游標
SQL Server支持的API服務器游標分為一下4種,分別是靜態(tài)游標、動態(tài)游標、只進游標和鍵集驅動游標,這里只介紹前兩種游標。
1、靜態(tài)游標,即只有NEXT操作。
/SCROLL表示使用所有的提取選項(FIRST、LAST、PRIOR、NEXT、RELATIVE、ABSOLUTE),若不指定只能使用NEXT提取選項。/
上面例1、2定義的即是靜態(tài)游標。
2、動態(tài)游標,有多種操作(FIRST、LAST、PRIOR、NEXT、RELATIVE、ABSOLUTE)。
例3、根據(jù)下表信息,在數(shù)據(jù)庫Sales中,定義一個游標CURSOR_1求商品信息表最后一行的商品信息。
這里因為求得最后一行信息即要使用LAST,所以要在CURSOR前面加SCROLL,使其變?yōu)閯討B(tài)游標。
sql語句:USE Sales DECLARE CURSOR_1 SCROLL CURSOR FOR SELECT * FROM Product OPEN CURSOR_1 FETCH LAST FROM CURSOR_1 CLOSE CURSOR_1 DEALLOCATE CURSOR_1
例4、根據(jù)例3信息,在數(shù)據(jù)庫Sales中,定義一個游標CURSOR_2分別求商品信息表中最后一行、游標當前行起前的第3行數(shù)據(jù)、游標當前行的前一行、表中第一行起向后的第2行、表中的第一行的數(shù)據(jù)。
sql語句:USE Sales DECLARE CURSOR_2 SCROLL CURSOR FOR SELECT * FROM Product OPEN CURSOR_2 FETCH LAST FROM CURSOR_2 --讀取表中最后一行,且將其作為當前行 FETCH RELATIVE -3 FROM CURSOR_2 --讀取游標當前行起前的第3行數(shù)據(jù),且將其作為當前行 FETCH PRIOR FROM CURSOR_2 --讀取游標當前行的前一行,且將其作為當前行 FETCH ABSOLUTE 2 FROM CURSOR_2 --讀取表中第一行起向后的第2行,且將其作為當前行 FETCH FIRST FROM CURSOR_2 --讀取表中的第一行,且將其作為當前行 CLOSE CURSOR_2 DEALLOCATE CURSOR_2
結語
以上就是本次數(shù)據(jù)庫原理與應用的全部內容,篇幅較長,感謝您的閱讀和支持,若有表述或代碼中有不當之處,望指出!您的指出和建議能給作者帶來很大的動力!!!
總結
以上是生活随笔為你收集整理的数据库原理与应用(SQL Server)笔记 第十一章 游标的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据库原理与应用(SQL Server)
- 下一篇: 计算机网络实验(华为eNSP模拟器)——