資料庫作業17 SQL練習9 CURSOR

2021-10-05 11:10:34 字數 2221 閱讀 8886

為何使用游標:

使用游標(cursor)的乙個主要的原因就是把集合操作轉換成單個記錄處理方式。用 sql 語言從資料庫中檢索資料後,結果放在記憶體的一塊區域中,且結果往往是乙個含有多個記錄的集合。游標機制允許使用者在 sql server 內逐行地訪問這些記錄,按照使用者自己的意願來顯示和處理這些記錄。

使用游標的步驟:

(1)說明游標

用declare語句為一條select語句定義游標:

exec

sqldeclare

游標cursor

for<

select 語

;

定義游標僅僅是一條說明性語句,這時關聯式資料庫管理系統並不執行select語句。(2)開啟游標用open語句將定義的游標開啟。

exec

sqlopen游標;

開啟游標實際上是執行相應的select語句,把查詢結果取到緩衝區中。這時游標處於活動狀態,指標指向查詢結果集中的第一條記錄。

(3)推進游標指標並取當前記錄

exec

sqlfetch

游標into

主變[指示變][

,主變[指示變

]]···;

其中主變數必須與select語句中的目標列表示式具有一一對應關係。

用fetch語句把游標指標向前推進一條記錄,同時將緩衝區中的當前記錄取出來送至主變數供主語言進一步處理。通過迴圈執行fetch語句逐條取出結果集中的行進行處理。

(4)關閉游標

用close語句關閉游標,釋放結果集占用的緩衝區及其他資源。

exec

sqlclose游標;

游標被關閉後就不再和原來的查詢結果集相聯絡。但被關閉的游標可以再次被開啟,與新的查詢結果相聯絡。

t-sql游標使用舉例:

if

(exists

(select

*from sys.objects where name =

'proc_cursor'))

drop

procedure proc_cursor

gocreate

procedure proc_cursor -- 儲存過程

asdeclare

@sno

char(9

)--定義變數

declare

@sname

char(20

)--定義變數

declare mycursor cursor

forselect sno,sname from student --宣告游標

open mycursor --開啟游標

fetch

next

from mycursor into

@sno

,@sname

while

(@@fetch_status=0

)--遍歷所有的資料

begin

print

'游標成功取出一條資料:'

print

@sno

print

@sname

print

'********************'

fetch

next

from mycursor into

@sno

,@sname

--取下一條游標資料

endclose mycursor --關閉游標

deallocate mycursor --刪除游標go

exec proc_cursor

go

執行結果:

把student表中儲存的學號和姓名順序輸出了一遍

和下面語句所執行的結果相同:

select sno,sname

from student

資料庫作業17 SQL練習9 CURSOR

if exists select from sys.objects where name proc cursor drop procedure proc cursor gocreate procedure proc cursor 建立儲存過程 procedure 名為proc cursor as d...

資料庫作業17 SQL練習9 CURSOR

if exists select from sys.objects where name proc cursor drop procedure proc cursor 如果存在,就刪除過程 gocreate procedure proc cursor 儲存過程 asdeclare sno char ...

資料庫作業17 SQL練習9 CURSOR

將sql嵌入到高階語言中混合程式設計,程式中會含有兩種不同計算模型的語句 1 sql語句 描述性的面向集合的語句,負責操縱資料庫 2 高階語言語句 c語言 過程性的面向記錄的語句,負責控制邏輯流程 c 中可以使用datatable讀取記錄,進一步逐條讀取記錄 什麼是游標?游標是系統為使用者開設的資料...