(一)**游標
(1)游標的概念
游標是指向查詢結果集的乙個指標,它是乙個通過定義語句與一條select語句相關聯的一組sql語句,即從結果集中逐一的讀取一條記錄。游標包含兩方面的內容:
●游標結果集:執行其中的select語句所得到的結果集;
●游標位置:乙個指向游標結果集內的某一條記錄的指標
利用游標可以單獨操縱結果集中的每一行。游標在定義以後存在兩種狀態:關閉和開啟。當游標關閉時,其查詢結果集不存在;只有當游標開啟時,才能按行讀取或修改結果集中的資料。
(2)**游標
游標我們可以通俗的解釋為變動的標示。正如它的解釋一樣,資料庫中的游標其實也是一種讀取資料的方式。舉個簡單的例子來說:我有乙個**本,**本上的號碼首先是按地域劃分的,現在我想找個家住廊坊的李四。首先我們要做的是先找到廊坊地區的**表,找到後的表也即是我們上面所說的游標結果集;而為了找到李四我們可能會用手一條一條逐行的掃過,以幫助我們找到所需的那條記錄。對應於資料庫來說,這就是游標的模型。所以,你可以這樣想象:**是資料庫中的表,而我們的手好比是游標。
總結來說游標就好比是在**本上逐一掃瞄號碼的手指。
(二)使用游標
乙個應用程式中可以使用兩種型別的游標:前端(客戶)游標和後端(伺服器)游標,它們是兩個不同的概念。
但無論使用哪種游標,都必須經過如下的步驟:
●宣告游標
●開啟游標
●從游標中運算元據
●關閉游標
下面我們主要講述下伺服器游標:
(1)定義游標
declare cursor_name cursor
for select_statement
[for]
舉例:declare company_crsr cursor
for select name,salary from company where salary>2000
for update of name,salary
上面我們宣告了乙個名為company_crsr的游標。
(2)開啟游標
open的語法為:
open 游標名
在宣告游標後,必須開啟它以便用fetch,update,delete讀取、修改、刪除行。在開啟乙個游標後,它將被放在游標結果集的首行前,必須用fetch語句訪問該首行。
(3)讀取游標資料
在宣告並開啟乙個游標後,可用fetch命令從游標結果集中獲取資料行。
fetch的語法為:
fetch [[next | prior | first | last | absolute |relative ]
from]游標名[into 變數列表]
引數說明:
next:返回結果集中當前行的下一行,如果該語句是第一次讀取結果集中資料則返回的是第一行
prior:返回結果集中當前行的上一行,如果該語句是第一次讀取結果集中的資料則無記錄結果返回並把游標位置設定為第一行。
first:返回游標第一行;last:返回游標中的最後一行;
absolute:如果n 或@nvar 為正數,返回從游標頭開始的第n 行並將返回的行變成新的當前行。如果n 或@nvar 為負數,返回游標尾之前的第n 行並將返回的行變成新的當前行。如果n 或@nvar 為0,則沒有行返回。n 必須為整型常量且@nvar 必須為smallint、tinyint 或int。
relative :如果n 或@nvar 為正數,返回當前行之後的第n 行並將返回的行變成新的當前行。如果n 或@nvar 為負數,返回當前行之前的第n 行並將返回的行變成新的當前行。如果n 或@nvar 為0,返回當前行。如果對游標的第一次提取操作時將fetch relative 的n 或@nvar 指定為負數或0,則沒有行返回。n 必須為整型常量且@nvar 必須為smallint、tinyint 或int。
舉例:fetch next
company_crsr into @name,@salary
sql server在每次讀取後返回乙個狀態值。可用@@sql_status訪問該值,下表給出了可能的@@sql_status值及其意義。
值意義:
0——fetch語句成功
1——fetch語句導致一錯誤
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 company
set name=」張三」,salary=」5000」
where current of company_crsr
(4)關閉游標
當結束乙個游標結果集時,可用close關閉。該語法為:
close 游標名
關閉游標並不改變其定義,可用open再次開啟。若想放棄游標,必須使用deallocate釋放它,deallocater的語法為:
deallocater cursor 游標名
deallocater語句通知sql server釋放declare語句使用的共享記憶體,不再允許另一程序在其上執行open操作。
讓資料庫游標變得簡單
一 游標 1 游標的概念 游標是指向查詢結果集的乙個指標,它是乙個通過定義語句與一條select語句相關聯的一組sql語句,即從結果集中逐一的讀取一條記錄。游標包含兩方面的內容 游標結果集 執行其中的select語句所得到的結果集 游標位置 乙個指向游標結果集內的某一條記錄的指標 利用游標可以單獨操...
讓資料庫游標變得簡單
一 游標 1 游標的概念 游標是指向查詢結果集的乙個指標,它是乙個通過定義語句與一條select語句相關聯的一組sql語句,即從結果集中逐一的讀取一條記錄。游標包含兩方面的內容 游標結果集 執行其中的select語句所得到的結果集 游標位置 乙個指向游標結果集內的某一條記錄的指標 利用游標可以單獨操...
資料庫游標
資料庫之 游標 轉貼 在資料庫開發過程中,當你檢索的資料只是一條記錄時,你所編寫的事務語句 往往使用select insert 語句。但是我們常常會遇到這樣情況,即從某一結果集中逐一地讀取一條記錄。那麼如何解決這種問題呢?游標為我們提供了一種極為優秀的解決方案。1.游標和游標的優點 在資料庫中,游標...