1.游標的概念
●游標結果集:執行其中的select語句所得到的結果集;
●游標位置:乙個指向游標結果集內的某一條記錄的指標
利用游標可以單獨操縱結果集中的每一行。游標在定義以後存在兩種狀態:關閉和開啟。當游標關閉時,其查詢結果集不存在;只有當游標開啟時,才能按行讀取或修改結果集中的資料。
2.使用游標
乙個應用程式可以使用兩種型別的游標:前端(客戶)游標和後端(伺服器)游標,它們是兩個不同的概念。
無論使用哪一種游標,都需要經過如下幾個步驟:
●定義游標
●開啟游標
●從游標中運算元據
●關閉游標
下面講述的是後端(伺服器)游標。
(1)定義游標
declare cursor語法為:
for select_statement
[for]
舉例:declare pubs_crsr cursor
for select pub_name,city,state
from publishers
for update of city,state
(2)開啟游標
open的語法為:
open 游標名
在宣告游標後,必須開啟它以便用fetch,update,delete讀取、修改、刪除行。在開啟乙個游標後,它將被放在游標結果集的首行前,必須用fetch語句訪問該首行。
(3)從游標中讀取資料
在宣告並開啟乙個游標後,可用fetch命令從游標結果集中獲取資料行。
fetch的語法為:
fetch 游標名[into 變數列表]
舉例:fetch pub_crsr into @name,@city,@state
sql server在每次讀取後返回乙個狀態值。可用@@sqlstatus訪問該值,下表給出了可能的@@sqlstatus值及其意義。
值意 義
0fetch語句成功
1fetch語句導致一錯誤
2結果集沒有更多的資料,當前位置位於結果集最後一行,而客戶對該游標仍發出fetch語句時。
若游標是可更新的,可用update和delete語句來更新和刪除行。
刪除游標當前行的語法為:
delete[from]表名
where current of 游標名
舉例:delete from authors where current of authors_crsr
當游標刪除一行後,sql server將游標置於被刪除行的前一行上。
更新游標當前行的語法為:
update 表名
set column_name1=
[,column_name2=
[……]
where current of 游標名
舉例:update publishers
set city=」asadena」,state=」ca」
where current of pubs_crsr
(4)關閉游標
當結束乙個游標結果集時,可用close關閉。該語法為:
close 游標名
關閉游標並不改變其定義,可用open再次開啟。若想放棄游標,必須使用deallocate釋放它,deallocater的語法為:
deallocater cursor 游標名
deallocater語句通知sql server釋放declare語句使用的共享記憶體,不再允許另一程序在其上執行open操作。
什麼是 REF游標
1,什麼是 ref游標 動態關聯結果集的臨時物件。即在執行的時候動態決定執行查詢。2,ref 游標 有什麼作用?實現在程式間傳遞結果集的功能,利用ref cursor也可以實現bulk sql,從而提高sql效能。3,靜態游標和ref 游標的區別是什麼?靜態游標是靜態定義,ref 游標是動態關聯 使...
什麼是資料庫游標?
在資料庫中,游標是乙個十分重要的概念。游標提供了一種對從表中檢索出的資料進行操作的靈活手段,就本質而言,游標實際上是一種能從包括多條資料記錄的結果集中每次提取一條記錄的機制。游標總是與一條t sql 選擇語句相關聯因為游標由結果集 可以是零條 一條或由相關的選擇語句檢索出的多條記錄 和結果集中指向特...
什麼是資料庫游標?
在資料庫中,游標是乙個十分重要的概念。游標提供了一種對從表中檢索出的資料進行操作的靈活手段,就本質而言,游標實際上是一種能從包括多條資料記錄的結果集中每次提取一條記錄的機制。游標總是與一條t sql 選擇語句相關聯因為游標由結果集 可以是零條 一條或由相關的選擇語句檢索出的多條記錄 和結果集中指向特...