十七、遊標

一、什麼是遊標?

遊標是一種能從包含多個元組的集合中每次讀取一個元組的機制。遊標總是和一段SELECT語句關聯,
SELECT語句查詢出的結果集就作爲集合,遊標能每次從該集合中讀取出一個元組進行不同操作。

二、遊標的核心價值

1. 將遊標定位在結果集特定元組。
2. 將遊標指定結果集中的元組數據讀出。
3. 利用循環讀取結果集中的多個元組數據。
4. 對遊標指定結果集的元組進行數據修改。
5. 爲其它用戶設置結果集數據的更新限制。
6. 提供腳本、存儲過程和觸發器中訪問結果集中數據的TSQL語句

三、遊標的基本使用

聲明遊標

DECLARE cursor_name CURSOR [INSENSITIVE] [SCROLL] CURSOR
FOR <SELECT語句>
[FOR READ ONLY|UPDATE[OF <列名>[,...n]]]
INSENSITIVE:定義遊標所選出的結果集存放在一個臨時表,對該遊標的讀取操作都有該臨時表來應
答。遊標不會隨着基本表內容的改變而改變,同時也無法通過遊標來更新基本表。如果不使用該關鍵
字,對基本表的更新、刪除都會反應到遊標中。
SCROLL:指定遊標使用的讀取選項,默認值爲NEXT,如果不使用該關鍵字,那麼讀取遊標只能進行
NEXT操作,如果使用該關鍵字,那麼遊標向任何方向,或者任何位置移動,進行NEXT、LAST、
FIRST、PRIOR、RELATIVE n、ABSULUTE n操作。
FOR READ ONLY:表示定義遊標爲只讀遊標,不允許使用UPDATE、DELETE語句更新遊標內的數據。
UPDATE[OF <類名>[,...n]]:指定遊標內可以更新的列,如果有指定要更新的列,則表明所有列都允
許更新。

打開遊標

OPEN [LOCAL|GLOBAL] cursor_name;

讀取遊標

FETCH [NEXT|PRIOR|FIRST|LAST
|ABSLUTE n|@nvar]
|RELATIVE n|@nvar]
FROM [GLOBAL]cursor_name
INTO[@nvar1,...n]

關閉遊標

在處理完結果集中數據之後,必須關閉遊標來釋放結果集
CLOSE cursor_name

釋放遊標

遊標使用不再需要之後,需要釋放遊標,以獲取與遊標有關的一切資源。
DEALLOCATE cursor_name
遊標系統白能量與函數
遊標系統變量與函數返回有關遊標的信息。
@@CURSOR_NUM
返回最後打開的遊標中滿足條件的元組數
@@FETCH_STATUS
返回上次執行FETCH命令的狀態

CURSOR_STATUS('GLOBAL|LOCAL','cursor_name')

用於確定是否返回遊標和結果集

利用遊標修改和刪除表數據

可以通過遊標來UPDATE修改或刪除DELETE表中的當前數據行。
--修改數據
UPDATE table_name
SET column_name=value|expression
WHERE CURRENT OF cursor_name
--刪除數據
DELETE FROM table_name
WHERE CURRENT OF cursor_name
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章