① sql 游標 是什麼意思
declare cr_cursor cursor --1.定義游標
for select name from dbo.sysobjects where xtype='U' and status>0
--?????? 這里是獲取記錄
fetch next From cr_cursor into @Table --??這里是用變數@Table保存獲取到的select 【name】 from dbo.sysobjects where xtype='U' and status>0
name的值
fetch next From cr_cursor into @Table--這句話的完整意思是
將游標移動到下一條記錄並將獲取到是name值賦值給變數@Table
----------------------------------------------------------------------
給你一個例子 和說明 我看來幾遍就學會游標了 下面是例子
---------------------------------------------------------------------
定義游標
Declare MyCursor Cursor For
Select Field1,Field2
From MyTable
Where (Field1 Like '%123%') And (Field2 = 'qqq') And (Field3 Is Not Null) And ......
Group By Field1,Field2
For Read Only
Open MyCursor
移動游標
fetch first from 游標 into 變數列表
取下一條
fetch next from 游標 into 變數列表
取第n條
fetch absolute n from 游標 into 變數列表
例子
日前,因工作需要累加某表裡面的某欄位的全部值,
比如有個表,內容如下
id,text
1,春花秋月何時了
2,往事知多少
3,小樓昨夜又春風
4,古國不堪回首月明中
......
其中id為系列號,text為文本內容,我想使用個sql語句,達到如下效果:
查詢text列,查詢的值累加,即查詢結果顯示如下:
春花秋月何時了 往事知多少 小樓昨夜又春風 古國不堪回首月明中 ...
用存儲過程+游標實現,示例如下
ALTER PROCEDURE [dbo].[abc]
-- Add the parameters for the stored procere here
@p1 int
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
declare @ttt varchar(100);
declare @bbb varchar(10);
set @ttt=''
set @bbb=''
declare mycur cursor for
select meno from test where gid= @p1
open mycur
fetch next from mycur into @bbb
WHILE @@FETCH_STATUS = 0
BEGIN
set @ttt=@ttt+@bbb
fetch next from mycur into @bbb
end
close mycur
select @ttt
② sql server什麼叫動態游標
動態游標的意思是說任何影響結果數據集的修改都將被反映出來。也就是說,游標的結果集中的數據 同資料庫中的數據會同步地改變。通俗一點就是說你當開了游標後,但資料庫的數據有所改變,你在滾動的時候游標都能檢測到,並反應在結果集中,所以他的結果集會一邊滾動一邊隨著數據改變.
也是基於這個原因,動態游標結果集中的行數據值、順序和成員在每次提取時都會改變,不能使用ABSOLUTE方式來提取結果集中特定行的記錄。
③ 游標如何實現動態SQL
就是拼接啊,拼接後可以用print列印出來看語句是否正確,也可以直接exec直接執行,看是否報錯
④ 動態游標 動態sql 是一回事嗎
SQL Server 支持的四種游標類型是:靜態游標、動態游標、只進游標、由鍵集驅動的游標。其中動態游標是對結果集可以進行更新,當滾動游標時,動態游標反映結果集中所做的所有更改,結果集中的行數據值、順序和成員在每次提取時都會改變。
靜態伺服器游標在 tempdb 中創建整個游標,由鍵集驅動的游標則在 tempdb 中創建鍵集
對於大結果集,使用動態游標更為適合。在查詢語句中指定for update就可以更新結果集,或沒有read_only就可以,常規情況下,不必關心是否動態,尚由伺服器隱含轉換的。
動態例子:
DECLARE abc CURSOR LOCAL FOR
SELECT c1, c2
FROM dbo.Table1;
OPEN abc;
FETCH abc;
UPDATE dbo.Table1
SET c2 = c2 + d2
FROM dbo.Table2
WHERE CURRENT OF abc;--更新游標
⑤ 動態SQL能執行打開游標的語句嗎
應該可以吧,把你的動態SQL
弄成字元串的形式,在SQL
裡面使用
exec
執行
DECLARE
@strSql
NVARCHAR(50)='SELECT
*
FROM
dbo.JS_Shop'
EXECUTE
(@strSql)
⑥ plsql如何將動態sql的查詢結果傳給游標
方法一,游標其實就是一條查詢語句,直接換成COUNT(1)就可以了
方法二,直接遍歷游標,就知道了
方法三:好像還有把結果集直接整到一個集合中,然後用集合的API,也一下統計出來了
BULK COLLECT INTO什麼的
⑦ 如何在定義游標的時候使用動態sql語句
在大多數時候我們在設計程序的時候都遵循下面的步驟:1、打開游標2、開始循環3、從游標中取值4、檢查那一行被返回5、處理6、關閉循環7、關閉游標例如:DECALRECURSORc_deptISSELECTdeptno,dnameFROMdeptORDERBYdeptno;CURSORc_emp(p_deptVARACHAR2)ISSELECTename,salaryFROMempWHEREdeptno=p_deptORDERBYenamev_tot_salaryEMP.SALARY%TYPE;BEGINFORr_deptINc_deptLOOPDBMS_OUTPUT.PUT_LINE('Department:'||r_dept.deptno||'-'||r_dept.dname);v_tot_salary:=0;FORr_empINc_emp(r_dept.deptno)LOOPDBMS_OUTPUT.PUT_LINE('Name:'||v_ename||'salary:'||v_salary);v_tot_salary:=v_tot_salary+v_salary;ENDLOOP;DBMS_OUTPUT.PUT_LINE('ToltalSalaryfordept:'||v_tot_salary);ENDLOOP;END;
⑧ 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' ; /*這里的動態生成的*/!
⑨ oracle 存儲過程執行動態SQL 返回結果給游標,外部程序獲得dataset結果集。
你這樣寫就可以了,ORACLE存儲過程不需要返回值,只要參數是out就代表為輸出參數了,你給它傳一個游標進去,執行完,這個游標的值就是你查詢的值了。
⑩ Sql中的游標是幹嘛的
游標(cursor)是結果集的邏輯擴展,可以看做指向結果集的一個指針,通過使用游標,應用程序可以逐行訪問並處理結果集。
ResultSet對象用於接收查詢結果,next()方法用於判斷結果集是否為空,相當於指針,指向結果集下一個數據。
(10)動態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