【发布时间】:2019-11-20 20:39:29
【问题描述】:
请问如何在sybase中正确地做一个嵌套游标? 我在下面的代码中遇到两个错误。
- 必须声明变量@notes
- 声明游标必须是查询批处理中的唯一语句。
当前的编码尝试:
DECLARE c3 cursor FOR
select distinct cust_ac_no from tempdb..M3_SHP_ACCOUNT_NOTES
where cust_ac_no in ('851243048')
--,'851261620
--order by cust_ac_no, inst_seq_no, ord_no, ref_no, acv_no
GO
DECLARE
@exec_str1 varchar(8000),
@exec_str2 varchar(8000),
@cust_ac_no varchar(10),
@c_ac varchar(10),
@notes varchar(4000),
@notes2 varchar(8000)
--select @exec_str1 = "select distinct notes from tempdb..M3_SHP_ACCOUNT_NOTES where cust_ac_no = "
OPEN c3
FETCH c3 into @cust_ac_no
WHILE @@sqlstatus = 0
BEGIN
DECLARE c2 cursor FOR
select distinct notes from tempdb..M3_SHP_ACCOUNT_NOTES
where cust_ac_no = + "'" + @cust_ac_no + "'"
order by cust_ac_no, inst_seq_no, ord_no, ref_no, acv_no
GO
OPEN c2
FETCH c2 into @notes
WHILE @@sqlstatus = 0
BEGIN
print @notes
FETCH c2 into @notes
END
CLOSE c2
DEALLOCATE c2
print @cust_ac_no
FETCH c3 into @cust_ac_no
END
CLOSE c3
DEALLOCATE c3
【问题讨论】:
-
对于批处理,您需要一种跨批处理('go')边界传递数据的方法;一个例子是使用临时表来保存所述值;在这种情况下,嵌套游标将被定义为将
M3_SHP_ACCOUNT_NOTES与临时表连接,并且在执行期间,您将在每个open C2之前截断/重新填充临时表;如果您有权创建存储过程,那么您可以将所有代码(游标、游标中的@variable 引用)放在单个存储过程中(例如,create proc、exec proc、drop proc) -
@markp 抱歉,你能显示示例代码吗?