求助sybase逐行循环问题,加急

请叫我-雷人 2012-10-30 09:59:39
ALTER PROCEDURE "DBA"."ee"(@vsyjh char(4),@ret integer output)

as
begin
declare @FPHM numeric(20)
declare @SHBC char
declare @LSHBC char(4)
declare @SHSYJH char(4)
declare @SHFPHM integer
declare @SHDJLB char
declare @SHDATE datetime
declare @SHSYYH char(15)
declare @SHHYKH char(13)
declare @SHJFKH char(13)
declare @SHTHSQ char(13)
declare @SHGHSQ char(13)
declare @SHHYSQ char(13)
declare @SHSQKH char(15)
declare @SHSQKTYPE char
declare @SHSQKZKFD numeric(15,2)
declare @SHYSJE numeric(15,2)
declare @SHSJFK numeric(15,2)
declare @SHZL numeric(15,2)
declare @SHSYSY numeric(15,2)
declare @SHHYZKE numeric(15,2)
declare @SHYHZKE numeric(15,2)
declare @SHLSZKE numeric(15,2)
declare @SHLSZRE numeric(15,2)
declare @SHCUSTINFO char(6)
declare @SHYJJF numeric(15,2)
declare @SHNUM1 numeric(12,6)
declare @SHNUM2 numeric(12,6)
declare @SHNUM3 numeric(12,6)
declare @SHSTR1 char(20)
declare @SHSTR2 char(20)
declare @SHSTR3 char(20)
declare @RSEQ numeric(20)
declare @SDROWNO integer
declare @SDYYYH char(15)
declare @SDBARCODE char(13)
declare @SDCODE char(13)
declare @SDTYPE char
declare @SDGZ char(20)
declare @SDDZXL char(10)
declare @SDPP char(6)
declare @SDSPEC char(2)
declare @SDBATCH char(15)
declare @SDPOPBNO char(15)
declare @SDNAME char(40)
declare @SDUNIT char(4)
declare @SDBZHL numeric(15,4)
declare @SDSL numeric(15,4)
declare @SDLSJ numeric(15,2)
declare @SDJG numeric(15,2)
declare @SDZJE numeric(15,2)
declare @SDHYZKE numeric(15,2)
declare @SDYHZKE numeric(15,2)
declare @SDYHZKFD numeric(12,6)
declare @SDLSZKE numeric(15,2)
declare @SDLSZRE numeric(15,2)
declare @SDZZKE numeric(15,2)
declare @SDZZRE numeric(15,2)
declare @SDPLZKE numeric(15,2)
declare @SDZSZKE numeric(15,2)
declare @SDSQKH char(13)
declare @SDSQKTYPE char
declare @SDPFZKFD numeric(12,6)
declare @SDSPZKFD numeric(12,6)
declare @SDSQKZKFD numeric(12,6)
declare @SDISVIPZK char
declare @SDXXTAX numeric(12,6)
declare @SDFLAG char
declare @SDYJHXCODE char(13)
declare @SDYSYJH char(4)
declare @SDYFPHM integer
declare @SDYJJF numeric(15,2)
declare @SDNUM1 numeric(12,6)
declare @SDNUM2 numeric(12,6)
declare @SDNUM3 numeric(12,6)
declare @SDSTR1 char(20)
declare @SDSTR2 char(20)
declare @SDSTR3 char(20)
declare @SPPMCODE char(4)
declare @SPMONEY numeric(15,2)
declare @SPERATE numeric(12,6)
declare @SPNO char(20)
declare @SPPAYERID char(20)
declare @SPYE numeric(15,2)
declare @PMPCODE char(2)
declare @lsign integer --YOLU上传的数据符号
declare @RMB numeric(15,2)
declare @USB numeric(15,2)
declare @USBHL numeric(12,6)
declare @HKD numeric(15,2)
declare @HKDHL numeric(12,6)
declare @XJZP numeric(15,2)
declare @ZZJZP numeric(15,2)
declare @XYK numeric(15,2)
declare @LQ numeric(15,2)
declare @ICK numeric(15,2)
declare @MZK numeric(15,2)
declare @SZ numeric(15,2)
declare @PAY11 numeric(15,2)
declare @HL11 numeric(12,6)
declare @PAY12 numeric(15,2)
declare @HL12 numeric(12,6)
declare @PAY13 numeric(15,2)
declare @HL13 numeric(12,6)
declare @PAY14 numeric(15,2)
declare @HL14 numeric(12,6)
declare @PAY15 numeric(15,2)
declare @HL15 numeric(12,6)

declare cur_head1 dynamic scroll cursor for select SHFPHM from
sellhead where SHSYJH = @vsyjh and SHNETBZ = 'N' --and SPFPHM=@vfphm
open cur_head1

fetch cur_head1 into @FPHM

while @@sqlstatus != 2
begin

declare cur_com dynamic scroll cursor for select SDROWNO,SDYYYH,SDBARCODE,SDCODE,SDTYPE,SDGZ,SDDZXL,SDPP,SDSPEC,SDBATCH,SDPOPBNO,SDNAME,
SDUNIT,SDBZHL,SDSL,SDLSJ,SDJG,SDZJE,SDHYZKE,SDYHZKE,SDYHZKFD,SDLSZKE,SDLSZRE,SDZZKE,
SDZZRE,SDPLZKE,SDZSZKE,SDSQKH,SDSQKTYPE,SDPFZKFD,SDSPZKFD,SDSQKZKFD,SDISVIPZK,SDXXTAX,
SDFLAG,SDYJHXCODE,SDYSYJH,SDYFPHM,SDYJJF,SDNUM1,SDNUM2,SDNUM3,SDSTR1,SDSTR2,SDSTR3 from
selldetail where SDSYJID = @vsyjh and SDFPHM=@FPHM order by
SDROWNO asc

declare @loop integer
declare @lSSTAPPVER char
select @lSSTAPPVER = SSTAPPVER from SYJSETUP
if @@error <> 0 goto procfail

select @SHBC = SHBC,@SHSYJH = SHSYJH,@SHFPHM = SHFPHM,@SHDJLB = SHDJLB,@SHDATE = SHDATE,@SHSYYH = SHSYYH,@SHHYKH = SHHYKH,@SHJFKH = SHJFKH,@SHTHSQ = SHTHSQ,@SHGHSQ = SHGHSQ,@SHHYSQ = SHHYSQ,@SHSQKH = SHSQKH,@SHSQKTYPE = SHSQKTYPE,@SHSQKZKFD = SHSQKZKFD,
@SHYSJE = SHYSJE,@SHSJFK = SHSJFK,@SHZL = SHZL,@SHSYSY = SHSYSY,@SHHYZKE = SHHYZKE,@SHYHZKE = SHYHZKE,@SHLSZKE = SHLSZKE,@SHLSZRE = SHLSZRE,@SHCUSTINFO = SHCUSTINFO,@SHYJJF = SHYJJF,@SHNUM1 = SHNUM1,@SHNUM2 = SHNUM2,@SHNUM3 = SHNUM3,@SHSTR1 = SHSTR1,@SHSTR2 = SHSTR2,@SHSTR3 = SHSTR3 from
sellhead where SHSYJH = @vsyjh and SHFPHM = @FPHM

if @@error <> 0 goto procfail


if @lSSTAPPVER = '1'
else --yolu
begin
--获得符号
execute SP_SENDSALEHEAD_YOLU @SHSYJH,@SHFPHM,convert(char(19),@SHDATE,120),@SHDJLB,@SHYSJE*@lsign,@SHSJFK*@lsign,@SHZL*@lsign,@SHLSZKE*@lsign,@SHLSZRE*@lsign,@SHHYZKE*@lsign,@SHYHZKE*@lsign,@SHSYSY*@lsign,@SHSYYH,@LSHBC,@SHHYKH,@RMB*@lsign,@USB*@lsign,@USBHL,@HKD*@lsign,@HKDHL,@XJZP*@lsign,@ZZJZP*@lsign,@XYK*@lsign,@LQ*@lsign,@ICK*@lsign,@MZK*@lsign,@SZ*@lsign,@PAY11*@lsign,@HL11,@PAY12*@lsign,@HL12,@PAY13*@lsign,@HL13,@PAY14*@lsign,@HL14,@PAY15*@lsign,@HL15,@SHYJJF*@lsign,@SHNUM1,@SHNUM2,@SHNUM3,@SHSTR1,@SHSTR2,@SHSTR3,@ret,@RSEQ
if sqlcode = -823 or sqlcode = -660 or sqlcode = -656 goto lostnet
if @ret = 2
begin
select @ret=1
goto procsucceed
end
open cur_com
if @@error <> 0 goto procfail
select @loop=1
while @loop = 1
select 2
begin
fetch next cur_com into @SDROWNO,@SDYYYH,@SDBARCODE,@SDCODE,@SDTYPE,@SDGZ,@SDDZXL,@SDPP,@SDSPEC,@SDBATCH,@SDPOPBNO,@SDNAME,
@SDUNIT,@SDBZHL,@SDSL,@SDLSJ,@SDJG,@SDZJE,@SDHYZKE,@SDYHZKE,@SDYHZKFD,@SDLSZKE,@SDLSZRE,@SDZZKE,
@SDZZRE,@SDPLZKE,@SDZSZKE,@SDSQKH,@SDSQKTYPE,@SDPFZKFD,@SDSPZKFD,@SDSQKZKFD,@SDISVIPZK,@SDXXTAX,
@SDFLAG,@SDYJHXCODE,@SDYSYJH,@SDYFPHM,@SDYJJF,@SDNUM1,@SDNUM2,@SDNUM3,@SDSTR1,@SDSTR2,
@SDSTR3
if @@fetch_status <> 0
select @loop=0
else
begin
if(LENGTH(@SDBARCODE) = 13 or LENGTH(@SDBARCODE) = 12) and SUBSTRING(@SDBARCODE,1,1) = '2' select @SDBARCODE=@SDCODE
if(LENGTH(@SDBARCODE) in( 12,13,18) ) and LOCATE(@SDBARCODE,@SDCODE,1) > 0 select @SDBARCODE=@SDCODE
if @SDBARCODE = @SDCODE select @SDTYPE='1'
else select @SDTYPE='4'
execute SP_SENDSALECOM_YOLU @RSEQ,@SHSYJH,@SHFPHM,convert(char(19),@SHDATE,120),@SDYYYH,@SDBARCODE,
@SDTYPE,@SDGZ,@SDSL*@lsign,@SDLSJ,@SDJG,(@SDLSZKE+@SDZZKE)*@lsign,(@SDLSZRE+@SDZZRE)*@lsign,@SDHYZKE*@lsign,@SDYHZKE*@lsign,
@SDYHZKFD,@SDYSYJH,@SDYFPHM,@SDDZXL,@SDPP,@SDPOPBNO,@SDYJHXCODE,@SDSPZKFD,@SDYJJF*@lsign,
@SDBZHL,@SDNUM2,@SDNUM3,@SDCODE,@SDSTR2,@SDSTR3,@RET
if sqlcode = -823 or sqlcode = -660 or sqlcode = -656 goto lostnet
if @RET = 0 goto procfail
end
end
close cur_com
execute SP_COMMIT_YOLU
if sqlcode = -823 or sqlcode = -660 or sqlcode = -656 goto lostnet
end

fetch next cur_head1 into @FPHM

end
close cur_head1
goto procsucceed
procfail: select @ret=0
return-1
lostnet: select @ret=-1
return-1
procsucceed: select @ret=1
return 1
end


这个过程有什么问题?为什么只能取到cur_head1中的一行信息?????????
...全文
297 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
请叫我-雷人 2012-11-01
  • 打赏
  • 举报
回复
谢谢。已经解决。我新写了个的过程定义单个游标然后在调用另一个过程。解决了。
WWWWA 2012-10-31
  • 打赏
  • 举报
回复
你用了嵌套游标,检查每个游标循环情况,

declare cur_com dynamic scroll cursor for select SDROWNO,SDYYYH,SDBARCODE,SDCODE,SDTYPE,SDGZ,SDDZXL,SDPP,SDSPEC,SDBATCH,SDPOPBNO,SDNAME,
SDUNIT,SDBZHL,SDSL,SDLSJ,SDJG,SDZJE,SDHYZKE,SDYHZKE,SDYHZKFD,SDLSZKE,SDLSZRE,SDZZKE,
SDZZRE,SDPLZKE,SDZSZKE,SDSQKH,SDSQKTYPE,SDPFZKFD,SDSPZKFD,SDSQKZKFD,SDISVIPZK,SDXXTAX,
SDFLAG,SDYJHXCODE,SDYSYJH,SDYFPHM,SDYJJF,SDNUM1,SDNUM2,SDNUM3,SDSTR1,SDSTR2,SDSTR3 from
selldetail where SDSYJID = @vsyjh and SDFPHM=@FPHM order by
SDROWNO asc
定义在第1个循环之外

参考示例:
CREATE PROCEDURE dbo.h11_ylg_temp;1

AS

BEGIN
/*创建临时表*/
Create Table #temp_hz
(zybh char(10),brxm char(10) null,fylbid char(10) null,
xmje decimal(4,2) null,zxrq char(10) null)
INSERT #temp_hz(zybh,brxm,fylbid,xmje,zxrq)

--按费用类别统计
SELECT zybh,brxm,fylbid,Isnull(sum(xmje),0),zxrq
from ylg_temp
GROUP BY zybh,brxm,fylbid,zxrq,fylbid

DECLARE @ls_zybh char(10),@ls_brxm char (10),@ls_fylbid char(10),
@ldc_xmje decimal(4,2),@ls_zxrq char(10)
--定义游标1
DECLARE CR_BRXX CURSOR FOR
SELECT zybh,brxm,zxrq FROM #temp_hz
--定义游标2
DECLARE CR_FYLBID CURSOR FOR
SELECT fylbid FROM h00_fylb
--打开游标1
OPEN CR_BRXX
--取值1
FETCH CR_BRXX INTO @ls_zybh,@ls_brxm,@ls_zxrq
WHILE @@SQLSTATUS=0
BEGIN
--打开游标2
OPEN CR_FYLBID
--取值2
FETCH CR_FYLBID INTO @ls_fylbid
WHILE @@SQLSTATUS=0
BEGIN
IF NOT EXISTS(SELECT * FROM #temp_hz WHERE
zybh=@ls_zybh and fylbid=@ls_fylbid)
/*没有费用类别的加一行*/
INSERT INTO #temp_hz (zybh,brxm,fylbid,xmje,zxrq)
VALUES (@ls_zybh,@ls_brxm,@ls_fylbid,0,@ls_zxrq)
FETCH CR_FYLBID INTO @ls_fylbid
END
--关闭游标2
CLOSE CR_FYLBID

FETCH CR_BRXX INTO @ls_zybh,@ls_brxm,@ls_zxrq
END
DEALLOCATE CURSOR CR_FYLBID
--关闭游标1
CLOSE CR_BRXX
DEALLOCATE CURSOR CR_BRXX
--生成表
SELECT * FROM #temp_hz
Drop Table #temp_hz
END
源码下载地址: https://pan.quark.cn/s/8d2c461c797c JavaWeb程序设计构成了掌握Web交互式应用程序开发的核心领域,对于初学者来说,精通这一技术具有决定性意义。在“JavaWeb程序设计(第三版)作业答案”中,我们可以预期获得针对该教材习题的一系列深入解析,从而协助学习者强化知识体系。 JavaWeb所包含的技术组件涵盖了Servlet、JSP(JavaServer Pages)、JDBC(Java Database Connectivity)以及各类框架如Spring MVC、Struts等。Servlet是Java平台提供的一种扩展服务器功能的接口,能够处理HTTP请求并生成相应的反馈。JSP则是一种用于构建动态网页的工具,它支持开发者将HTML代码与Java代码进行整合编写,从而简化了Web应用程序的开发流程。 作业答案通常会涉及以下几个核心内容: 1. **Servlet基础**:可能包含Servlet生命周期、init(), service(), destroy()方法的应用,以及如何在web.xml文件中设定Servlet的映射关系。 2. **JSP基础**:JSP的九大内置对象,如request、response、session、application等的使用,以及EL(Expression Language)和JSTL(JavaServer Pages Standard Tag Library)的实际操作。 3. **HTTP协议理解**:GET和POST请求方法的差异,请求头与响应头的应用,以及会话管理的概念阐释。 4. **JDBC数据库操作**:与数据库建立连接,执行SQL指令,处理查询结果集,以及...
源码链接: https://pan.quark.cn/s/a4b39357ea24 斐讯K2是一款广受用户青睐的无线路由器,其运行表现稳定且具备较高的可操作性,在DIY爱好者群体中拥有极高的声誉。本资料将系统性地阐述斐讯K2的固件刷机方法及其关联的技术要点。固件升级是路由器爱好者改善设备性能、扩展功能的一种普遍手段,经由替换出厂固件,能够达成更加个性化的网络配置、增强安全防护等目标。斐讯K2固件资源库涵盖了多种知名的非官方固件,诸如Tomato Pheonix 不死鸟、高恪、PandoraBox 潘多拉等,这些固件均具备独特的优势,能够适配不同用户的需求。 1. Tomato Pheonix 不死鸟:Tomato是一款立足于Linux的开源固件,以其精巧、高效而备受推崇。不死鸟版本是专门为华硕及斐讯路由器优化的分支,提供了卓越的QoS(服务质量)配置、详尽的图表监控以及便捷的固件升级途径。对于那些需要精准调控带宽和监测网络状态的用户而言,这是一个理想的选项。 2. 高恪:高恪固件是OpenWrt的定制化版本,着重于操作的便捷性和运行的可靠性,特别适合对路由器操作不甚熟悉的用户群体。它提供了一些实用的功能,例如内置的广告屏蔽、快速测速工具等,同时保留了OpenWrt的适应性。 3. PandoraBox 潘多拉:潘多拉盒是另一款基于OpenWrt的固件,它以丰富的插件库和强大的自定义潜力而闻名。用户能够依据个人需求安装各类插件,实现更多功能,如远程接入、DDNS(动态域名解析服务)等。 4. 官方固件的纯净版本与定制版本:官方固件通常更侧重于稳定性,纯净版意味着未预置额外的应用或服务,适合注重稳定性的用户。定制版则可能包含了制造商的特色功能或优...

2,598

社区成员

发帖
与我相关
我的任务
社区描述
Sybase相关技术讨论区
社区管理员
  • Sybase社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧