PB脚本游标 新的问题。

lijingworkhard 2010-01-09 09:37:23

DECLARE YPKC_cur CURSOR FOR
SELECT KCSL,MRDJ,PFDJ,LSDJ,PH,SCCJ,YXQ,RKDH,RKXLH,GMP,QS,IFZB,ZL,GMPXJ,NOGMPXJ
FROM YK_YPKC
WHERE YKH = :gl_ykdm AND YPDM = :YPDM AND KCSL > 0 AND itempkg_id = :ls_itempkg_id
Order By YXQ,RKRQ;
OPEN YPKC_cur;
FETCH YPKC_cur INTO :KCSL,:MRDJ,:PFDJ,:LSDJ,:PH,:SCCJ,:YXQ,:RKDH,:RKXLH,:GMP,:QS,:IFZB,:ZL,:XJ1,:XJ2;
DO WHILE sl > 0
......
FETCH NEXT YPKC_cur
INTO :KCSL,:MRDJ,:PFDJ,:LSDJ,:PH,:SCCJ,:YXQ,:RKDH,:RKXLH,:GMP,:QS,:IFZB,:ZL,:XJ1,:XJ2;
LOOP
CLOSE YPKC_cur;

以上是原来的游标。


现在我想让如果全局变量gs_li=1时
SELECT KCSL,MRDJ,PFDJ,LSDJ,PH,SCCJ,YXQ,RKDH,RKXLH,GMP,QS,IFZB,ZL,GMPXJ,NOGMPXJ
FROM YK_YPKCTJ
WHERE YKH = :gl_ykdm AND YPDM = :YPDM AND KCSL > 0
否则取别外一个表的信息。
由于do while里的内容太多,我想 OPEN YPKC_cur;
FETCH YPKC_cur INTO :KCSL,:MRDJ,:PFDJ,:LSDJ,:PH,:SCCJ,:YXQ,:RKDH,:RKXLH,:GMP,:QS,:IFZB,:ZL,:XJ1,:XJ2;
DO WHILE sl > 0
......
FETCH NEXT YPKC_cur
INTO :KCSL,:MRDJ,:PFDJ,:LSDJ,:PH,:SCCJ,:YXQ,:RKDH,:RKXLH,:GMP,:QS,:IFZB,:ZL,:XJ1,:XJ2;
LOOP
CLOSE YPKC_cur; 这些内容不变的情况下更新一下游标的写法。
但if判断不行。两种IF方法都不行。怎么办呢??
...全文
146 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
chaoleo 2010-01-17
  • 打赏
  • 举报
回复
DO WHILE sl > 0
loop

s1是什么东东?
通常的语法是
do while sqlca.sqlcode=0
loop

还有就是绝对同意楼上的朋友们提到的使用datastore~方便简单并且速度快
DYFDWX 2010-01-11
  • 打赏
  • 举报
回复
用datastore来做,快
builderwfy 2010-01-11
  • 打赏
  • 举报
回复
一般建議用數據存儲來處理,因為用遊標效率很低而且占用服務器
sewinten 2010-01-10
  • 打赏
  • 举报
回复
最好使用datastore , 通过变更datastroe的dataobject,就能实现你要的效果了,比你用游标更方便,效率更高。
swallowluo 2010-01-10
  • 打赏
  • 举报
回复
当然动态游标的效率比静态游标的效率要更低,但是如果对效率要求不高还是挺方便的。
swallowluo 2010-01-10
  • 打赏
  • 举报
回复
你可以用动态游标
delcare dynamic cursor 游标名 for sqlsa;
prepare sqlsa from :ls_sql;(把表名以及条件组成SQL语句的字符串)
open dynamic 游标名;
...
close 游标名;
QY_QU 2010-01-09
  • 打赏
  • 举报
回复
同意! 使用datastore,来的快一些,后期维护也方便.
dahaidao 2010-01-09
  • 打赏
  • 举报
回复
写个数据窗口,来得快啊。
风_雨_晴 2010-01-09
  • 打赏
  • 举报
回复
if gs_li=1 then
DECLARE YPKC_cur CURSOR FOR
SELECT KCSL,MRDJ,PFDJ,LSDJ,PH,SCCJ,YXQ,RKDH,RKXLH,GMP,QS,IFZB,ZL,GMPXJ,NOGMPXJ
FROM YK_YPKC
WHERE YKH = :gl_ykdm AND YPDM = :YPDM AND KCSL > 0 AND itempkg_id = :ls_itempkg_id
Order By YXQ,RKRQ;
else
DECLARE YPKC_cur CURSOR FOR
SELECT KCSL,MRDJ,PFDJ,LSDJ,PH,SCCJ,YXQ,RKDH,RKXLH,GMP,QS,IFZB,ZL,GMPXJ,NOGMPXJ
FROM 另一个表
end if
OPEN YPKC_cur;

建议用datastore代替游标
pb8 2010-01-09
  • 打赏
  • 举报
回复
一、一般情况下,不建议使用游标,性能低下且特占服务器资源,N年前我也喜欢写游标,简单直接,N年后我的程序里基本上看不到游标的影子了,建议使用数据窗口替代;

二、你的sl是什么值,游标的的终止应该是判断sqlca的值的,你的sl是什么条件?

743

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 脚本语言
社区管理员
  • 脚本语言社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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