SQL Server 數據庫SQL語句中CURSOR(遊標)的使用

本文主講SQL Server數據庫中 遊標CURSOR 的使用,歡迎閱讀~


前言

將SQL嵌入到高級語言中混合編程,SQL語句負責操縱數據庫,高級語言語句負責控制邏輯流程。
數據庫工作單元與源程序工作單元之間的通信主要包括:
(1) 向主語言傳遞SQL語句的執行狀態信息,使主語言能夠據此信息控制程序流程,主要用SQL通信區( SQL Communication Area, SQLCA)實現。
(2) 主語言向SQL語句提供參數,主要用主變量(host variable) 實現。
(3) 將SQL語句查詢數據庫的結果交主語言處理,主要用主變量和遊標(cursor) 實現。
ps:SQL語句中使用的主語言程序變量簡稱爲主變量,根據其作用的不同又可分爲輸入主變量和輸出主變量


爲什麼要使用遊標

👀SQL語言是面向集合的,一條SQL語句可以產生或處理多條記錄;而主語言是面向記錄的,一組主變量一次只能存放一條記錄。
所以僅僅使用主變量並不能完全滿足SQL語句嚮應用程序輸出數據的要求,爲此嵌入式SQL引入了遊標的概念,用來協調這兩種不同的處理方式~
遊標是系統爲用戶開設的數據緩衝區,存放SQL語句的執行結果,每個遊標區都有一個名字。
用戶可以用SQL語句逐一從遊標中獲取記錄,並賦給主變量,交由主語言進一步處理~


使用遊標的SQL語句

一般情況下,SELECT語句查詢結果是多條記錄,因此需要用遊標機制將多條記錄一次一條地送給主程序處理,從而把對集合的處理轉換爲對單個記錄的處理
使用遊標的步驟:
(1)說明遊標
DECLARE語句爲一條SELECT語句定義遊標:

EXEC SQL DECLARE<遊標名> CURSOR FOR <SELECT 語句>;

ps:定義遊標僅僅是一條說明性語句, 這時關係數據庫管理系統並不執行SELECT語句
(2)打開遊標
用OPEN語句將定義的遊標打開。

EXEC SQL OPEN <遊標名>;

打開遊標實際上是執行相應的SELECT語句,把查詢結果取到緩衝區中。這時遊標處於活動狀態,指針指向查詢結果集中的第一條記錄
(3)推進遊標指針並取當前記錄

EXEC SQL FETCH <遊標名>
INTO <主變量>[<指示變量>][,<主變量>[<指示變量>]]...;

其中主變量必須與SELECT語句中的目標列表達式具有一一對應關係。
FETCH語句把遊標指針向前推進一條記錄,同時將緩衝區中的當前記錄取出來送至主變量供主語言進一步處理。通過循環執行FETCH語句逐條取出結果集中的行進行處理。
(4)關閉遊標
用CLOSE語句關閉遊標,釋放結果集佔用的緩衝區及其他資源。

EXEC SQL CLOSE <遊標名>;

遊標被關閉後就不再和原來的查詢結果集相聯繫。但被關閉的遊標可以再次被打開,與新的查詢結果相聯繫。
🌟來看實例:

IF (exists (select * from sys.objects where name = 'proc_cursor'))
    DROP PROCEDURE proc_cursor
GO
CREATE PROCEDURE proc_cursor --創建存儲過程
AS
DECLARE @Sno char(9) --定義變量
DECLARE @Sname char(20) --定義變量
 
DECLARE mycursor CURSOR FOR select Sno, Sname from Student --聲明遊標
 
OPEN mycursor  --打開遊標
 
FETCH NEXT FROM mycursor INTO @Sno, @Sname
 
WHILE(@@FETCH_STATUS = 0)  --遍歷所有的數據,@@FETCH_STATUS函數返回值爲0表示FETCH語句執行成功
BEGIN
	PRINT '遊標成功取出一條數據:'
	PRINT @Sno
	PRINT @Sname
	PRINT '-----------------------'
	FETCH NEXT FROM mycursor INTO @Sno, @Sname  --取下一條遊標數據
END
 
CLOSE mycursor --關閉遊標
 
DEALLOCATE mycursor --刪除遊標
GO
 
EXEC proc_cursor
GO

ps:一些 Transact-SQL 系統函數的名稱以兩個 at 符號 (@@) 開頭。 儘管在舊版 SQL Server 中,@@函數稱爲全局變量,但它們不是變量,不具有等同於變量的行爲。 @@函數是系統函數,語法遵循函數規則。詳細可參考:變量 (Transact-SQL)
在這裏插入圖片描述
這是Student表,對照着看下面的執行結果~
在這裏插入圖片描述
可以看到查詢結果集合中的記錄被一條一條地輸出了,達到了我們的目的👏


那,數據庫SQL語句中CURSOR(遊標)的簡單使用 就介紹完啦,感謝閱讀~😊
如文中有不恰當的地方,望提出指正~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章