SQL 游標 Cursor 基本用法

2022-05-08 23:24:11 字數 3281 閱讀 5155

/*

table1結構如下

id int

name varchar(50)

*/declare

@idint

declare

@name

varchar(50

)declare cursor1 cursor

for--

定義游標cursor1

select

*from table1 --

使用游標的物件(跟據需要填入select文)

open cursor1 --

開啟游標

fetch

next

from cursor1 into

@id,@name

--將游標向下移1行,獲取的資料放入之前定義的變數@id,@name中

while

@@fetch_status=0

--判斷是否成功獲取資料

begin

update table1 set name=name+'1

'where id=

@id--

進行相應處理(跟據需要填入sql文)

fetch

next

from cursor1 into

@id,@name

--將游標向下移1行

endclose cursor1 --

關閉游標

deallocate cursor1

游標一般格式:

declare 游標名稱 cursor for select 欄位1,欄位2,欄位3,... from 表名 where ...

open 游標名稱

fetch next from 游標名稱 into 變數名1,變數名2,變數名3,...

while @@fetch_status=0

begin

sql語句執行過程... ...

fetch next from 游標名稱 into 變數名1,變數名2,變數名3,...

endclose 游標名稱

deallocate 游標名稱 (刪除游標)

/*

功能:資料庫**tbl_users資料

deptid userid username

1 100 a

1 101 b

2 102 c

要求用乙個sql語句輸出下面結果

deptid username

1 ab

2 c

[要求用游標實現設計: ok_008

備註:無

*/create

table #temp1(deptid int,userid int,username varchar(20)) --

待測試的資料表

create

table #temp2(deptid int,username varchar(20)) --

結果表--

先把一些待測試的資料插入到待測試表#temp1中

insert

into

#temp1

select

1,100,'a'

union

allselect

1,101,'b'

union

allselect

1,131,'d'

union

allselect

1,201,'f'

union

allselect

2,302,'c'

union

allselect

2,202,'a'

union

allselect

2,221,'e'

union

allselect

3,102,'y'

union

allselect

3,302,'e'

union

allselect

3,121,'t'

--declare

@deptid

int,@username

varchar(20)--

定義游標

declare select_cursor cursor

forselect deptid,username from

#temp1

open

select_cursor

fetch

next

from select_cursor into

@deptid,@username

--提取操作的列資料放到區域性變數中

while

@@fetch_status=0

--返回被 fetch 語句執行的最後游標的狀態

/*@@fetch_status =0 fetch 語句成功

@@fetch_status =-1 fetch 語句失敗或此行不在結果集中

@@fetch_status =-2 被提取的行不存在

*/begin

--當表#temp2列deptid存在相同的資料時,就直接在列username上追加@username值

if(exists(select

*from #temp2 where deptid=

@deptid

))

update #temp2 set username=username +

@username

where deptid=

@deptid

else

--插入新資料

insert

into #temp2 select

@deptid,@username

fetch

next

from select_cursor into

@deptid,@username

endclose

select_cursor

deallocate

select_cursor

select

*from #temp2 --

測試結果

drop

table #temp1,#temp2

ORACLE 游標 cursor的基本用法

游標是sql的乙個記憶體工作區,由系統或使用者以變數的形式定義。游標的作用就是用於臨時儲存從資料庫中提取的資料塊。在某些情況下,需要把資料從存放在磁碟的表中調到計算機記憶體中進行處理,最後將處理結果顯示出來或最終寫回資料庫。這樣資料處理的速度才會提高,否則頻繁的磁碟資料交換會降低效率。游標的作用就相...

PL SQL中cursor 游標 游標 的用法

今天簡單的總結一下pl sql中cursor 游標 游標 的用法.相信不少做開發或維護的dba在找工作的時候,遇到過類似的面視問題 請簡單的描述一下游標的型別,說一下普通游標和ref游標之間的區別,以及什麼時候該正確應用哪乙個?這個題目,我著實難住了不少人,其實他們在具體開發的時候,也還是比較能夠把...

游標(cursor)概念

游標 cursor 游標是系統為使用者開設的乙個資料緩衝區,存放sql語句的執行結果 每個游標區都有乙個名字 使用者可以用sql語句逐一從游標中獲取記錄,並賦給主變數,交由主語言進一步處理 主語言是面向記錄的,一組主變數一次只能存放一條記錄 僅使用主變數並不能完全滿足sql語句向應用程式輸出資料的要...