sql临时表在游标当中更新的错误,急等
用pb写了一个程序,用到了临时表,但是却不能正常运行,下面先看程序
DECLARE MyCur CURSOR FOR
SELECT distinct a.pmggnm,b.dwjjsl,b.jldw,b.dwjjsl1,b.jldw1,c.jldwmc
FROM #htzx_temp a,pmgg b,lbpmdz c
WHERE a.pmggnm = b.pmggnm and b.pmzjnm = c.pmzjnm group by a.pmggnm,b.dwjjsl,b.jldw,b.dwjjsl1,b.jldw1,c.jldwmc using sqlca;
OPEN MyCur ;
FETCH MyCur INTO :Ls_pmggnm,:ld_dwjjsl,:ls_dwmc,:ld_dwjjsl1,:ls_dwmc1,:ls_dw ;
DO WHILE SQLCa.SQLCODE = 0
update #htzx_temp set qqcz = czsl * :ld_jjsl,qqhs = hssl * :ld_jjsl where pmggnm = :ls_pmggnm using sqlca;
//关键是这句不能执行,跟踪sqlca.sqlerrtext提示对象被打开
FETCH MyCur INTO :Ls_pmggnm,:ld_dwjjsl,:ls_dwmc,:ld_dwjjsl1,:ls_dwmc1,:ls_dw;
LOOP
在游标当中执行查询一个临时表,然后更新的时候,提示对象被打开,不能更新数据表。为什么啊????请大家帮忙看一下
[解决办法]
如果你非要用游标+循环这种写法,可以对#htzx_temp表备份一个#htzx_temp1表,然后
DO WHILE SQLCa.SQLCODE = 0
update #htzx_temp1 set qqcz = czsl * :ld_jjsl,qqhs = hssl * :ld_jjsl where pmggnm = :ls_pmggnm using sqlca;
FETCH MyCur INTO :Ls_pmggnm,:ld_dwjjsl,:ls_dwmc,:ld_dwjjsl1,:ls_dwmc1,:ls_dw;
LOOP