資料庫游標
2007-10-10 15:40
游標提供了一種對從表中檢索出的資料進行操作的靈活手段,就本質而言,游標實際上是一種能從包括多條資料記錄的結果集中每次提取一條記錄的機制。游標總是與一條t_sql 選擇語句相關聯因為游標由結果集(可以是零條、一條或由相關的選擇語句檢索出的多條記錄)和結果集中指向特定記錄的游標位置組成。當決定對結果集進行處理時,必須宣告乙個指向該結果集的游標。
使用游標有四種基本的步驟:宣告游標、開啟游標、提取資料、關閉游標。
1.宣告游標
同其它變數一樣,我們也可以定義游標的訪問型別:全域性、共享、例項或區域性,游標變數的命名規範建議也同其它變數一樣。 declare my_cursor cursor keyset for select * from info
declare customercursor cursor for
select acct_no,name,balance from customer where province="北京";
2.開啟游標
open customercursor;
3.提取資料
fetch語句來取得資料。一條fetch語句一次可以將一條記錄放入程式設計師指定的變數中。已經宣告並開啟乙個游標後,我們就可以將資料放入任意的變數中。在fetch語句中您可以指定游標的名稱和目標變數的名稱。
--宣告區域性變數
declare @id int,@name varchar(20),@address varchar(20)
--定位到指定位置的記錄
fetch absolute 56488 from my_cursor into @id,@name,@address
select @id as id,@name as name,@address as address
--定位到當前記錄相對位置記錄
fetch relative -88 from my_cursor into @id,@name,@address
select @id as id,@name as name,@address as address
--定位到當前記錄前一條
fetch prior from my_cursor into @id,@name,@address
select @id as id,@name as name,@address as address
--定位到當前記錄後一條
fetch next from my_cursor into @id,@name,@address
select @id as id,@name as name,@address as address
--定位到首記錄
fetch first from my_cursor into @id,@name,@address
select @id as id,@name as name,@address as address
--定位到尾記錄
fetch last from my_cursor into @id,@name,@address
select @id as id,@name as name,@address as address
注:如果提示「提取型別··不能用於只進游標」則在宣告游標時:declare mycursor cursorscrollfor ·· (fast_forward :只進游標 ; scroll: 滾動游標 )
示例:declaremycursorcursorscrollforselect * from test1
declare @row1 int,@row2 char(10),@row3 char(10),@row4 char(10)
openmycursor
fetchnextfrommycursorinto@row1, @row2, @row3, @row4
while (@@fetch_status=0)
begin
insert into test1(id, a, b, c)
values (@row1, @row2, @row3, @row4)
fetch next from mycursor into @row1, @row2, @row3, @row4
end
closemycursor
deallocatemycursor
(示例是將test1表中的資料複製一次!)
(@@fetch_status 返回被 fetch 語句執行的最後游標的狀態,而不是任何當前被連線開啟的游標的狀態。0 fetch 語句成功;-1 fetch語句失敗或此行不在結果集中;-2 被提取的行不存在;所以使用@@fetch_status=0判斷是否游標到了最後一行)
高階應用:
修改當前游標所在行的資訊,我們可以如下操作:
update table1
set balance=1000
where current of yourcursor;
刪除當前行的操作如下:
delete from table1
where current of yourcursor;
此時宣告游標的時候:declare my_cursor cursor scroll dynamic for ···
scroll表示可隨意移動游標指標(否則只能向前),dynamic表示可以讀寫游標(否則游標唯讀)
資料庫游標
資料庫之 游標 轉貼 在資料庫開發過程中,當你檢索的資料只是一條記錄時,你所編寫的事務語句 往往使用select insert 語句。但是我們常常會遇到這樣情況,即從某一結果集中逐一地讀取一條記錄。那麼如何解決這種問題呢?游標為我們提供了一種極為優秀的解決方案。1.游標和游標的優點 在資料庫中,游標...
資料庫游標
1.為何使用游標 使用游標 cursor 的乙個主要的原因就是把集合操作轉換成單個記錄處理方式。用sql語言從資料庫中檢索資料後,結果放在記憶體的一塊區域中,且結果往往是乙個含有多個記錄的集合。游標機制允許使用者在sql server內逐行地訪問這些記錄,按照使用者自己的意願來顯示和處理這些記錄。2...
資料庫游標
1.為何使用游標 使用游標 cursor 的乙個主要的原因就是把集合操作轉換成單個記錄處理方式。用sql語言從資料庫中檢索資料後,結果放在記憶體的一塊區域中,且結果往往是乙個含有多個記錄的集合。游標機制允許使用者在sql server內逐行地訪問這些記錄,按照使用者自己的意願來顯示和處理這些記錄。2...