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

sql聲明游標

發布時間: 2022-01-23 14:49:23

sql中游標的定義是什麼

游標詳細說明 RS.OPEN SQL,CONN,A,B 參數A為設定游標的類型,其取值為: 0 僅向前游標,只能向前瀏覽記錄,不支持分頁、Recordset、BookMark 1 鍵集游標,其他用戶對記錄說做的修改將反映到記錄集中,但其他用戶增加或刪除記錄不會反映到記錄集中。支持分頁、Recordset、BookMark 2 動態游標功能最強,但耗資源也最多。用戶對記錄所做的修改,增加或刪除記錄都將反映到記錄集中。支持全功能瀏覽。 3 靜態游標,只是數據的一個快照,用戶對記錄所做的修改,增加或刪除記錄都不會反映到記錄集中。支持向前或向後移動 參數B為記錄集的鎖定類型,其取值為: 1 鎖定類型,默認的,只讀,不能作任何修改 2 當編輯時立即鎖定記錄,最安全的方式 3 只有在調用Update方法時才鎖定記錄集,而在此前的其他操作仍可對當前記錄進行更改、插入和刪除等 4 當編輯時記錄不會被鎖定,而更改、插入和刪除是在批處理方式下完成的 打開數據記錄集方法其實不止一種,但是我們用的最多的就是 rs.open sql,1,1的方法,可是後面的數字參數很多人不解其意,下面我們來介紹一下。 其實open方法後面有多個參數 CursorType LockType CommandType 比如 rs.open sql,1,1 也可以寫成 rs.cursorType = 1 rs.LockType = 1 rs.open sql 其中CursorType代表從一個表或者一個SQL查詢結果返回的記錄。 這個參數有四個值分別是: adOpenForwardOnly 表示只允許在記錄集內的記錄間往前移動。這個是預設值。 adOpenKeyset 反映由其它用戶所做的對記錄的改變或者刪除動作,但並不反映由其它用戶做作的添加新記錄的動作。 adOpenDynamic 反映由其它用戶所做的對記錄的改變或者刪除動作,包括添加的新記錄 adOpenStatic 不反映其它用戶對記錄所做的修改,添加,刪除動作。 這四個值VBSCRIPT預定義位 adOpenForwardOnly = 0 adOpenKeyset = 1 adOpenDynamic = 2 adOpenStatic = 3 lockType 表示當打開記錄集時,數據提供者用於鎖定資料庫的類型: adLockReadOnly 數據不能改變,這是預設值! adLockPessimistic 數據提供者在開始編輯數據的時候鎖定記錄 adLockOptimistic 僅當調用update方法時,數據提供者鎖定記錄 adLockBatchOptimistic 用於批處理修改 他們的常量值定義分別是: adLockReadOnly = 1 adLockPessimistic = 2 adLockOptimistic = 3 adLockBatchOptimistic = 4 rs.open sql,conn,1,1 讀取記錄 select rs.open sql,conn,1,3 只更新記錄最好 update rs.open sql,conn,2,3 插入和刪除最好 insert delete

② sql游標的寫法

給你一個游標的寫法。
此demo的目地是將游標行的name更新到另一張表的欄位中條件是2張表的ID相同

Declare@Idvarchar(20)
Declare@Namevarchar(20)
DeclareCurCursorFor
selectid,namefromtemp1
OpenCur
FetchnextFromCurInto@Id,@Name
While@@fetch_status=0
Begin
UpdatetempSet[c3]=@Namewhere[id]=@Id
FetchNextFromCurInto@Id,@Name
End
CloseCur
DeallocateCur

③ 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;

④ 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

⑤ 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


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

⑥ PL/SQL中如何聲明及使用動態游標

oracle動態游標問題: 游標查詢的內容是 動態生成的,然後裡面具體有多少個欄位沒辦法事先知道,而動態游標賦值一定要用fetch到一個變數,有沒辦法把動態游標內容賦值到一個記錄集或者表中,而這個表的欄位和記錄集欄位是沒辦法預先定義好的,而是通過系統動態生成的!
具體例子如下:declare-- Local variables here
v_sql VARCHAR2(1024);
cur SYS_REFCURSOR;
v_column VARCHAR2(1024);
v_exe VARCHAR2(1024);begin---v_sql 是通過一連串的復雜邏輯程序生成的動態內容的 在這里就簡單寫了
v_sql:='select C_001,b_002,d_003 ..../*具體有多少個欄位沒辦法事先知道*/from table1,table2 .../*具體有多少個欄位沒辦法事先知道*/tablen where 1=1 and /*復雜條件*/';
v_column:= 'C_001+b_002/d_003';--這個變數也是通過復雜的邏輯生成的 沒辦法事先知道的 但是這里的欄位都在 v_sql 中有
v_column := replace(replace(REPLACE(v_column,'b_','c.b_'),'c_','c.c_'),,'c_','c.d_');
FOR i IN 1..e_table(i);
v_exe:='INSERT INTO table_a SELECT'|| v_column||' FROM al' ; /*這里的動態生成的*/!

⑦ sql中的游標是什麼怎樣用呢

在資料庫中,游標提供了一種對從表中檢索出的數據進行操作的靈活手段。就本質而言,游標實際上是一種能從包括多條數據記錄的結果集中每次提取一條記錄的機制。
游標總是與一條SQL
選擇語句相關聯因為游標由結果集(可以是零條、一條或由相關的選擇語句檢索出的多條記錄)和結果集中指向特定記錄的游標位置組成。
游標關於資料庫中的操作會對整個行集產生影響。由 SELECT 語句返回的行集包括所有滿足該語句 WHERE 子句中條件的行。由語句所返回的這一完整的行集被稱為結果集。
應用程序,特別是互動式聯機應用程序,並不總能將整個結果集作為一個單元來有效地處理。這些應用程序需要一種機制以便每次處理一行或一部分行。游標就是提供這種機制的結果集擴展。
(7)sql聲明游標擴展閱讀:
游標通過以下方式擴展結果處理:
1.允許定位在結果集的特定行。
2.從結果集的當前位置檢索一行或多行。
3.支持對結果集中當前位置的行進行數據修改。
4.為由其他用戶對顯示在結果集中的資料庫數據所做的更改提供不同級別的可見性支持。
5.提供腳本、存儲過程和觸發器中使用的訪問結果集中的數據的 Transact-SQL 語句。
參考資料來源:搜狗網路—游標

⑧ sql中怎麼定義游標啊

樓主,看網路文庫http://wenku..com/view/31711f05cc1755270722088b.html

⑨ sql語言定義游標時加不加scroll有什麼區別

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

⑩ 在SQL Server中,怎樣聲明才不是只讀(read only)游標

盡管以前連過,這次仍花費了N多時間查資料,配置,現在把詳細步驟貼給大家,分享之。

一,JDBC-ODBC橋的方法,這種方法最簡單了。

1,新建一個資料庫,為student吧,再在其中新建一張表命名為info,添加一些數據(方便觀察效果),下面我們配置數據源
開始----控制面板----管理工具----數據源-----添加----選中「SQL Server」----完成
把默認的資料庫改為student。點「下一步」----完成----「測試數據源」,如果提示成功,OK,數據源配置好了!代碼如下:import java.sql.*;

public class q
{
public static void main(String[] args)
{
String sql;
Connection conn;
Statement stmt;
ResultSet rs;
try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
String url="jdbc:odbc:student";
String user="sa";
String password="";
conn= DriverManager.getConnection(url,user,password);
stmt=conn.createStatement();
sql="select * from info";
rs=stmt.executeQuery(sql);
while(rs.next())
{
System.out.println(rs.getString(1));
System.out.println(rs.getString(2));
}
rs.close();
stmt.close();
conn.close();
}
catch(Exception e)
{
e.printStackTrace();
}
}
}編譯運行如圖:上面的結果是我info裡面的欄位。OK?成功了吧?二,JDBC連接1,下載jdbc:
下載:SQL Server 2000 SP3,同樣到Microsoft的網站去下載升級包,~~~~~~~~~~~~~~~~~~關鍵開始~~~~~~~~~~~~~~~~~~~~,下載其中的chs_sql2ksp3.exe,注意下載下來的是chs_sql2ksp3.exe文件,雙擊它選擇安裝到一個目錄時是在解壓,然後你還要到那個目錄下雙擊setup.bat批處理文件才是開始安裝(應該說是升級)!!!具體下載地址是:
~~~~~~~~~~~~~~~~~~~~關鍵結束~~~~~~~~~~~~~~~~~~~~~~~~~註:我一直是這個原因,裝錯補訂了,我曾經裝過SP3a,SP4,結果都不行!2,安裝JDBC,把其安裝目錄下的lib下的三個文件添加到classpath中,這個網上都有很多。我的是:C:\Program Files\Microsoft SQL Server 2000 Driver for JDBC\lib\msbase.jar;C:\Program Files\Microsoft SQL Server 2000 Driver for JDBC\lib\mssqlserver.jar;C:\Program Files\Microsoft SQL Server 2000 Driver for JDBC\lib\msutil.jar;添加完成後,安裝SP3補訂,也就是剛才下的那個文件,可能需要重啟,我給忘了。3,現在就是代碼了,如下:import java.sql.*;public class L
{
public static void main(String[] args)
{
String sql;
Connection conn;
Statement stmt;
ResultSet rs;
try
{
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=student";
String user="sa";
String password="";
conn= DriverManager.getConnection(url,user,password);
stmt=conn.createStatement();
sql="select * from info";
rs=stmt.executeQuery(sql);
while(rs.next())
{
System.out.println(rs.getString(1));
System.out.println(rs.getString(2));
}
rs.close();
stmt.close();
conn.close();
}
catch(Exception e)
{
e.printStackTrace();
}
}
}