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

怎麼在sql看游標

發布時間: 2022-04-18 21:12:54

1. sql游標怎麼使用

先定義游標打游標使用游標關閉
知道用版本SQL
現都少用游標比較耗資源

2. SQL游標如何使用

A. 在簡單的游標中使用 FETCH
下例為 authors 表中姓以字母 B 開頭的行聲明了一個簡單的游標,並使用 FETCH NEXT 逐個提取這些行。FETCH 語句以單行結果集形式返回由 DECLARE CURSOR 指定的列的值。

USE pubs
GO
DECLARE authors_cursor CURSOR FOR
SELECT au_lname FROM authors
WHERE au_lname LIKE "B%"
ORDER BY au_lname

OPEN authors_cursor

-- Perform the first fetch.
FETCH NEXT FROM authors_cursor

-- Check @@FETCH_STATUS to see if there are any more rows to fetch.
WHILE @@FETCH_STATUS = 0
BEGIN
-- This is executed as long as the previous fetch succeeds.
FETCH NEXT FROM authors_cursor
END

CLOSE authors_cursor
DEALLOCATE authors_cursor
GO

au_lname
----------------------------------------
Bennet
au_lname
----------------------------------------
Blotchet-Halls
au_lname
----------------------------------------

B. 使用 FETCH 將值存入變數
下例與上例相似,但 FETCH 語句的輸出存儲於局部變數而不是直接返回給客戶端。PRINT 語句將變數組合成單一字元串並將其返回到客戶端。

USE pubs
GO

-- Declare the variables to store the values returned by FETCH.
DECLARE @au_lname varchar(40), @au_fname varchar(20)

DECLARE authors_cursor CURSOR FOR
SELECT au_lname, au_fname FROM authors
WHERE au_lname LIKE "B%"
ORDER BY au_lname, au_fname

OPEN authors_cursor

-- Perform the first fetch and store the values in variables.
-- Note: The variables are in the same order as the columns
-- in the SELECT statement.

FETCH NEXT FROM authors_cursor
INTO @au_lname, @au_fname

-- Check @@FETCH_STATUS to see if there are any more rows to fetch.
WHILE @@FETCH_STATUS = 0
BEGIN

-- Concatenate and display the current values in the variables.
PRINT "Author: " + @au_fname + " " + @au_lname

-- This is executed as long as the previous fetch succeeds.
FETCH NEXT FROM authors_cursor
INTO @au_lname, @au_fname
END

CLOSE authors_cursor
DEALLOCATE authors_cursor
GO

Author: Abraham Bennet
Author: Reginald Blotchet-Halls

C. 聲明 SCROLL 游標並使用其它 FETCH 選項
下例創建一個 SCROLL 游標,使其通過 LAST、PRIOR、RELATIVE 和 ABSOLUTE 選項支持所有滾動能力。

USE pubs
GO

-- Execute the SELECT statement alone to show the
-- full result set that is used by the cursor.
SELECT au_lname, au_fname FROM authors
ORDER BY au_lname, au_fname

-- Declare the cursor.
DECLARE authors_cursor SCROLL CURSOR FOR
SELECT au_lname, au_fname FROM authors
ORDER BY au_lname, au_fname

OPEN authors_cursor

-- Fetch the last row in the cursor.
FETCH LAST FROM authors_cursor

-- Fetch the row immediately prior to the current row in the cursor.
FETCH PRIOR FROM authors_cursor

-- Fetch the second row in the cursor.
FETCH ABSOLUTE 2 FROM authors_cursor

-- Fetch the row that is three rows after the current row.
FETCH RELATIVE 3 FROM authors_cursor

-- Fetch the row that is two rows prior to the current row.
FETCH RELATIVE -2 FROM authors_cursor

CLOSE authors_cursor
DEALLOCATE authors_cursor
GO

au_lname au_fname
---------------------------------------- --------------------
Bennet Abraham
Blotchet-Halls Reginald
Carson Cheryl
DeFrance Michel
del Castillo Innes
Dull Ann
Green Marjorie
Greene Morningstar
Gringlesby Burt
Hunter Sheryl
Karsen Livia
Locksley Charlene
MacFeather Stearns
McBadden Heather
O'Leary Michael
Panteley Sylvia
Ringer Albert
Ringer Anne
Smith Meander
Straight Dean
Stringer Dirk
White Johnson
Yokomoto Akiko

au_lname au_fname
---------------------------------------- --------------------
Yokomoto Akiko
au_lname au_fname
---------------------------------------- --------------------
White Johnson
au_lname au_fname
---------------------------------------- --------------------
Blotchet-Halls Reginald
au_lname au_fname
---------------------------------------- --------------------
del Castillo Innes
au_lname au_fname
---------------------------------------- --------------------
Carson Cheryl

3. sql 中游標的作用及使用方法

游標可以從資料庫中查詢出一個結果集,在你關閉它之前,你可以反復使用這個結果集,讀取這個結果集中的任意行任意欄位的內容,一般在存儲過程或前台程序中常見。

4. PL、SQL的游標怎麼用

一> 游標是什麼:
游標字面理解就是游動的游標。
用資料庫語言來描述:游標是映射在結果集中一行數據上的位置實體,有了游標
用戶就可以訪問結果集中的任意一行數據了,將游標放置到某行後,即可對該行數據進行操作,例如提取當前
行的數據等等。
二> 游標的分類:
顯式游標和隱式游標

顯示游標的使用需要4步:
1.聲明游標

CURSOR mycur(vartype number) is
select emp_no,emp_zc from cus_emp_basic
where com_no = vartype;

2.打開游標
open mycur(000627) 註:000627:參數

3.讀取數據
fetch mycur into varno,varprice;

4.關閉游標
close mycur;
三> 游標的屬性
oracle 游標有4個屬性: %ISOPEN , %FOUND , %NOTFOUND, %ROWCOUNT

%ISOPEN 判斷游標是否被打開,如果打開%ISOPEN 等於true,否則等於false
%FOUND %NOTFOUND 判斷游標所在的行是否有效,如果有效,則%FOUNDD等於true,否則等於false
%ROWCOUNT 返回當前位置為止游標讀取的記錄行數。

四> 示例:

set serveroutput on;
declare
varno varchar2(20);
varprice varchar2(20);

CURSOR mycur(vartype number) is
select emp_no,emp_zc from cus_emp_basic
where com_no = vartype;
begin

if mycur%isopen = false then

open mycur(000627);
end if;
fetch mycur into varno,varprice;
while mycur%found
loop
dbms_output.put_line(varno||','||varprice);
if mycur%rowcount=2 then
exit;
end if;
fetch mycur into varno,varprice;

end loop;
close mycur;

end;

pl/sql 記錄 的結構和c語言中的結構體類似,是由一組數據項構成的邏輯單元。
pl/sql 記錄並不保存再資料庫中,它與變數一樣,保存再內存空間中,在使用記錄時候,要首先定義記錄結構
,然後聲明記錄變數。可以把pl/sql記錄看作是一個用戶自定義的數據類型。

set serveroutput on;
declare

type person is record
(
empno cus_emp_basic.emp_no%type,
empzc cus_emp_basic.emp_zc%type);

person1 person;

cursor mycur(vartype number)is
select emp_no,emp_zc from cus_emp_basic
where com_no=vartype;

begin
if mycur%isopen = false then
open mycur(000627);
end if;

loop
fetch mycur into person1;
exit when mycur%notfound;
dbms_output.put_line('雇員編號:'||person1.empno||',地址:'||person1.empzc);
end loop;
close mycur;
end;

典型游標for 循環

游標for循環示顯示游標的一種快捷使用方式,它使用for循環依次讀取結果集中的行
數據,當form循環開始時,游標自動打開(不需要open),每循環一次系統自動讀取
游標當前行的數據(不需要fetch),當退出for循環時,游標被自動關閉(不需要使用close)

使用游標for循環的時候不能使用open語句,fetch語句和close語句,否則會產生錯誤。

set serveroutput on;
declare

cursor mycur(vartype number)is
select emp_no,emp_zc from cus_emp_basic
where com_no=vartype;

begin

for person in mycur(000627) loop

dbms_output.put_line('雇員編號:'||person.emp_no||',地址:'||person.emp_zc);
end loop;

end;

5. sql server中如何判斷游標是否存在

--測試
DECLARE @SNAME VARCHAR(20)
DECLARE DD CURSOR FOR SELECT SNAME FROM S
OPEN DD
--樓上說的對.你要的是判斷游標是否存在
select * from MASTER.dbo.syscursors where cursor_name='DD'
--以下操作為判斷游標是否存在的同時檢測游標狀態。
SELECT (CASE WHEN CURSOR_STATUS('global','DD')=1 THEN '游標的結果集至少有一行'
WHEN CURSOR_STATUS('global','DD')=0 THEN '游標的結果集為空'
WHEN CURSOR_STATUS('global','DD')=-1 THEN '游標被關閉'
WHEN CURSOR_STATUS('global','DD')=-2 THEN '游標不適用'
WHEN CURSOR_STATUS('global','DD')=-3 THEN '游標不存在' END) AS RESULT
/*返回結果:
1
游標的結果集至少有一行。

對於不區分的游標和鍵集游標,結果集至少有一行。

對於動態游標,結果集可以有零行、一行或多行。
分配給該變數的游標已打開。

對於不區分的游標和鍵集游標,結果集至少有一行。

對於動態游標,結果集可以有零行、一行或多行。

0
游標的結果集為空。*
分配給該變數的游標已經打開,然而結果集肯定為空。*

-1
游標被關閉。
分配給該變數的游標被關閉。

-2
不適用。
可以是:

先前調用的過程並沒有將游標分配給 OUTPUT 變數。

先前調用的過程為 OUTPUT 變數分配了游標,然而在過程結束時,游標處於關閉狀態。因此,游標被釋放,並且沒有返回調用過程。

沒有將游標分配給已聲明的游標變數。

-3
具有指定名稱的游標不存在。
具有指定名稱的游標變數並不存在,或者即使存在這樣一個游標變數,但並沒有給它分配游標。

6. 如何使用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,才能執行上述操作。這一賦值在連接資料庫的前後進行均可。

7. sql游標查詢(急)

declare @專業代碼名稱 varchar(50)
declare cur_test cursor for select 專業名稱 from dbo.數據總表 where 條件 group by 專業名稱
open cur_test
fetch cur_test into @專業代碼名稱
while(@@fetch_status = 0)
begin
--這里是你自己要做的操作內容。比如查詢變數值
select @專業代碼名稱

fetch next from cur_test into @專業代碼名稱
end
close cur_test
deallocate cur_test供xuanhao2016參考。如有幫助你採納。可到IT實驗室,天天件測試網論壇上進一步交流。

8. 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

9. 如何使用SQL Server游標(一)

但是我們常常會遇到這樣情況,即從某一結果集中逐一地讀取一條記錄。那麼如何解決這種問題呢?游標為我們提供了一種極為優秀的解決方案。 1.游標和游標的優點 在資料庫中,游標是一個十分重要的概念。游標提供了一種對從表中檢索出的數據進行操作的靈活手段,就本質而言,游標實際上是一種能從包括多條數據記錄的結果集中每次提取一條記錄的機制。游標總是與一條T_SQL 選擇語句相關聯因為游標由結果集(可以是零條、一條或由相關的選擇語句檢索出的多條記錄)和結果集中指向特定記錄的游標位置組成。當決定對結果集進行處理時,必須聲明一個指向該結果集的游標。如果曾經用 C 語言寫過對文件進行處理的程序,那麼游標就像您打開文件所得到的文件句柄一樣,只要文件打開成功,該文件句柄就可代表該文件。對於游標而言,其道理是相同的。可見游標能夠實現按與傳統程序讀取平面文件類似的方式處理來自基礎表的結果集,從而把表中數據以平面文件的形式呈現給程序。 我們知道關系資料庫管理系統實質是面向集合的,在MS SQL SERVER 中並沒有一種描述表中單一記錄的表達形式,除非使用where 子句來限制只有一條記錄被選中。因此我們必須藉助於游標來進行面向單條記錄的數據處理。 由此可見,游標允許應用程序對查詢語句select 返回的行結果集中每一行進行相同或不同的操作,而不是一次對整個結果集進行同一種操作;它還提供對基於游標位置而對表中數據進行刪除或更新的能力;而且,正是游標把作為面向集合的資料庫管理系統和面向行的程序設計兩者聯系起來,使兩個數據處理方式能夠進行溝通。 2.游標種類 MS SQL SERVER支持三種類型的游標:Transact_SQL 游標,API 伺服器游標和客戶游標。 (1)Transact_SQL游標 Transact_SQL游標是由DECLARE CURSOR語法定義、主要用在Transact_SQL 腳本、存儲過程和觸發器中。Transact_SQL 游標主要用在伺服器上,由從客戶端發送給伺服器的Transact_SQL 語句或是批處理、存儲過程、觸發器中的Transact_SQL 進行管理。 Transact_SQL 游標不支持提取數據塊或多行數據。 (2)API 游標 API 游標支持在OLE DB, ODBC 以及DB_library 中使用游標函數,主要用在伺服器上。每一次客戶端應用程序調用API 游標函數,MS SQL SEVER 的OLE DB 提供者、ODBC驅動器或DB_library 的動態鏈接庫(DLL) 都會將這些客戶請求傳送給伺服器以對API游標進行處理。 (3)客戶游標 客戶游標主要是當在客戶機上緩存結果集時才使用。在客戶游標中,有一個預設的結果集被用來在客戶機上緩存整個結果集。客戶游標僅支持靜態游標而非動態游標。由於伺服器游標並不支持所有的Transact-SQL 語句或批處理,所以客戶游標常常僅被用作伺服器游標的輔助。因為在一般情況下,伺服器游標能支持絕大多數的游標操作。 由於API 游標和Transact-SQL 游標使用在伺服器端,所以被稱為伺服器游標,也被稱為後台游標,而客戶端游標被稱為前台游標。在本章中我們主要講述伺服器(後台)游標。select count(id) from info select * from info --清除所有記錄

10. SQL中如何確定游標到了最後以及游標的作用是什麼

@@fetch_status=0 是游標提取數據失敗,即數據提取結束到最後了。

游標主要作用是,操作SQL查詢結果集。

以下為典型游標的應用:

createproccursorTest
@_idint=0,
@_namevarchar(50)=''
as--創建游標
declare@cursorcursor--設定游標欲操作的數據集
set@cursor=cursorfor
select_id,_namefromusers
open@cursor--打開游標
fetchnextfrom@cursorinto@_id,@_name--移動游標指向到第一條數據,提取第一條數據存放在變數中
while(@@fetch_status=0)begin--如果上一次操作成功則繼續循環
print@_name--操作提出的數據
fetchnextfrom@cursorinto@_id,@_name--繼續提下一行
end
close@cursor--關閉游標
deallocate@cursor--刪除游標