① 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