/*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語句向應用程式輸出資料的要...