當前位置:首頁 » 編程語言 » sql聲明游標命令
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sql聲明游標命令

發布時間: 2023-01-31 22:43:40

『壹』 sql中的游標是幹嘛的

游標(cursor)是結果集的邏輯擴展,可以看做指向結果集的一個指針,通過使用游標,應用程序可以逐行訪問並處理結果集。

ResultSet對象用於接收查詢結果,next()方法用於判斷結果集是否為空,相當於指針,指向結果集下一個數據。

(1)sql聲明游標命令擴展閱讀:

游標的生命周期包含有五個階段:聲明游標、打開游標、讀取游標數據、關閉游標、釋放游標。

1、聲明游標語法

DECLARE cursor_name CURSOR [ LOCAL | GLOBAL ]

[ FORWARD_ONLY | SCROLL ]
[ STATIC | KEYSET | DYNAMIC | FAST_FORWARD ]
[ READ_ONLY | SCROLL_LOCKS | OPTIMISTIC ]
[ TYPE_WARNING ]
FOR select_statement
[ FOR UPDATE [ OF column_name [ ,...n ] ] ]

2、打開游標語法

open [ Global ] cursor_name | cursor_variable_name

3、讀取游標數據語法

Fetch[ [Next|prior|Frist|Last|Absoute n|Relative n ]from ][Global] cursor_name[into @variable_name[,....]]

4、關閉游標語法

close [ Global ] cursor_name | cursor_variable_name

5、釋放游標語法

deallocate cursor_name

『貳』 SQL中什麼時候需要使用游標使用游標的步驟

游標一般用於把通過腳本得到的結果集的內容在用於其它的SQL語句中。但是游標執行會影響腳本執行速度,所以使用時請慎重。 在存儲過程或觸發器中使用 SQL 游標的典型過程為: 聲明SQL 變數包含游標返回的數據。為每個結果集列聲明一個變數。聲明足夠大的變數來保存列返回的值,並聲明變數的類型為可從列數據類型隱式轉換得到的數據類型。

使用 DECLARE CURSOR 語句將 SQL 游標與 SELECT 語句相關聯。另外,DECLARE CURSOR 語句還定義游標的特性,例如游標名稱以及游標是只讀還是只進。

使用 OPEN 語句執行 SELECT 語句並填充游標。

使用 FETCH INTO 語句提取單個行,並將每列中的數據移至指定的變數中。然後,其他 SQL 語句可以引用那些變數來訪問提取的數據值。SQL 游標不支持提取行塊。

使用 CLOSE 語句結束游標的使用。關閉游標可以釋放某些資源,例如游標結果集及其對當前行的鎖定,但如果重新發出一個 OPEN 語句,則該游標結構仍可用於處理。由於游標仍然存在,此時還不能重新使用該游標的名稱。DEALLOCATE 語句則完全釋放分配給游標的資源,包括游標名稱。釋放游標後,必須使用 DECLARE 語句來重新生成游標。

『叄』 SQL游標怎麼用

例子
table1結構如下
id int
name varchar(50)

declare @id int
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行
end

close cursor1 --關閉游標
deallocate cursor1

『肆』 如何使用SQL Server游標

關閉游標的語句很簡單:CLOSE CustomerCursor; 使用Where子句子 我們可以動態地定義游標中的Where子句的參數,例如在本例中我們是直接定義了查詢省份是北京的記錄,但也許在應用中我們要使用一個下拉式列表框,由用戶來選擇要查詢的省份,我們該怎樣做呢? 我們在前面曾經提到過,DECLARE語句的作用只是定義一個游標,在OPEN語句中這個游標才會真正地被執行。了解了這些,我們就可以很方便地實現這樣的功能,在DECLARE的Where子句中加入變數作參數,如下所示:DECLARE CustomerCursor CURSORFORSELCECT acct_no,name,balance FROM customer WHERE province=:ls_province; ∥定義ls_province的值 OPEN CustomerCursor; 游標的類型 同其它變數一樣,我們也可以定義游標的訪問類型:全局、共享、實例或局部,游標變數的命名規范建議也同其它變數一樣。--聲明游標declare my_cursor cursor keyset forselect*from info --刪除游標資源deallocate my_cursor --打開游標,在游標關閉或刪除前都有效open my_cursor --關閉游標close my_cursor --聲明局部變數declare@idint,@namevarchar(20),@addressvarchar(20) --定位到指定位置的記錄fetch absolute 56488from my_cursor into@id,@name,@addressselect@idas id,@nameas name,@addressas address --定位到當前記錄相對位置記錄fetch relative -88from my_cursor into@id,@name,@addressselect@idas id,@nameas name,@addressas address --定位到當前記錄前一條fetch prior from my_cursor into@id,@name,@addressselect@idas id,@nameas name,@addressas address --定位到當前記錄後一條fetchnextfrom my_cursor into@id,@name,@addressselect@idas id,@nameas name,@addressas address --定位到首記錄fetch first from my_cursor into@id,@name,@addressselect@idas id,@nameas name,@addressas address --定位到尾記錄fetch last from my_cursor into@id,@name,@addressselect@idas id,@nameas name,@addressas address 實例:use database1 declare my_cursor cursor scroll dynamic /**//*scroll表示可隨意移動游標指 針(否則只能向前),dynamic表示可以讀寫游標(否則游標只讀)*/forselect proctname from proct open my_cursor declare@pname sysname fetchnextfrom my_cursor into@pnamewhile(@@fetch_status=0) begin print'Proct Name: '+@pname fetchnextfrom my_cursor into@pname endfetch first from my_cursor into@pnameprint@pname/**//*update proct set proctname='zzg' where current of my_cursor *//**//*delete from proct where current of my_cursor */close my_cursor deallocate my_cursor 4.游標的高級技巧 盡管目前基於SQL語句的後台資料庫所支持的語言都大致相當,但對游標的支持卻有著一些差異,例如對滾動游標支持。所謂滾動游標,就是程序員可以指定游標向前後任意一個方向滾動。如在Informix中,您甚至還可以將游標滾向結果集開頭或末尾,使用的語句分別是FETCH FIRST,FETCH LAST、FETCH PRIOR和FETCH NEXT。當程序員用FETCH語句,其預設是指FETCH NEXT。由於滾動是在資料庫後台實現的,所以滾動游標為用戶編程提供了極大的方便。 對游標支持的另一個不同是可修改游標。上述游標的使用都是指只讀游標,而象Oracle、Sybase等資料庫卻另外支持可作修改的游標。使用這樣的資料庫,您可以修改或刪除當前游標所在的行。例如修改當前游標所在行的用戶的余額,我們可以如下操作:UPDATE customer SET balance=1000WHERECURRENTof customerCursor; 刪除當前行的操作如下: WHERECURRENTOF CustomerCursor; 但是如果您當前使用的資料庫是Sybase,您需要修改資料庫的參數,將游標可修改的值定為1,才能執行上述操作。這一賦值在連接資料庫的前後進行均可。

『伍』 SQL 游標怎麼寫 要代碼

僅僅是代碼?以下代碼是更新一張數據表

createprocereUpdateValue--存儲過程裡面放置游標
as
begin

declareUpdateCursorcursor--聲明一個游標,查詢滿足條件的數據
forselect主鍵,SD_VALfromEQ_SD_D

openUpdateCursor--打開

declare@idint,@SD_VALnvarchar(20)--聲明一個變數,用於讀取游標中的值
fetchnextfromUpdateCursorinto@id,@SD_VAL

while@@fetch_status=0--循環讀取
begin
updateEQ_SD_Dsetname=@SD_VALwhereid=@id
fetchnextfromUpdateCursorinto@id,@SD_VAL
end

closeUpdateCursor--關閉

deallocateUpdateCursor--刪除

end

這里是一個教學

http://www.cnblogs.com/moss_tan_jun/archive/2011/11/26/2263988.html

『陸』 sql sever怎麼創建游標

一、下面是一個使用游標的簡單例子,有SQL基本知識的朋友不難看懂:


--申明一個游標
DECLAREMyCursorCURSOR
FORSELECTTOP5FBookName,FBookCodingFROMTBookInfo

--打開一個游標
OPENMyCursor

--循環一個游標
DECLARE@BookNamenvarchar(2000),@BookCodingnvarchar(2000)

FETCHNEXTFROMMyCursorINTO@BookName,@BookCoding
WHILE@@FETCH_STATUS=0
BEGIN
print'name'+@BookName
FETCHNEXTFROMMyCursorINTO@BookName,@BookCoding
END

--關閉游標
CLOSEMyCursor
--釋放資源
DEALLOCATEMyCursor


二、提示的是,多數情況下,游標可以用臨時表代替,個人建議使用臨時表,因為游標對系統性能消耗要大。

『柒』 Oracle下如何用sql創建游標

For 循環游標

(1)定義游標

(2)定義游標變數

(3)使用for循環來使用這個游標

declare
--類型定義
cursorc_job
is
selectempno,ename,job,sal
fromemp
wherejob='MANAGER';
--定義一個游標變數v_cinfoc_emp%ROWTYPE,該類型為游標c_emp中的一行數據類型
c_rowc_job%rowtype;
begin
forc_rowinc_jobloop
dbms_output.put_line(c_row.empno||'-'||c_row.ename||'-'||c_row.job||'-'||c_row.sal);
endloop;
end;

Fetch游標

使用的時候必須要明確的打開和關閉

declare
--類型定義
cursorc_job
is
selectempno,ename,job,sal
fromemp
wherejob='MANAGER';
--定義一個游標變數
c_rowc_job%rowtype;
begin
openc_job;
loop
--提取一行數據到c_row
fetchc_jobintoc_row;
--判讀是否提取到值,沒取到值就退出
--取到值c_job%notfound是false
--取不到值c_job%notfound是true
exitwhenc_job%notfound;
dbms_output.put_line(c_row.empno||'-'||c_row.ename||'-'||c_row.job||'-'||c_row.sal);
endloop;
--關閉游標
closec_job;
end;