游标为什么不继续了??????急!!!!!

sxy2000 2002-05-13 02:55:38
我有这样一个游标,如下:
DECLARE BX_CUR1 CURSOR FOR SELECT ct_bxm,am_clf,am_rgf,am_gcf,am_qtf
FROM jx_wh_bx
WHERE (ct_bxm LIKE :Ls_bxm1) and (length(ct_bxm) > 6);

OPEN BX_CUR1;
FETCH BX_CUR1 INTO :Ls_bxm,:Ld_clf,:Ld_rgf,:Ld_gcf,:Ld_qtf;

DO WHILE SQLCA.SQLCODE = 0
Ll_newrow = dw_detail.insertrow(0)
dw_detail.ScrollToRow(Ll_newrow)
dw_detail.setitem(Ll_newrow,'ct_bxm',Ls_bxm)
dw_detail.setitem(Ll_newrow,'am_clf',Ld_clf)
dw_detail.setitem(Ll_newrow,'am_rgf',Ld_rgf)
dw_detail.setitem(Ll_newrow,'am_gcf',Ld_gcf)
dw_detail.setitem(Ll_newrow,'am_qtf',Ld_qtf)
FETCH BX_CUR1 INTO :Ls_bxm,:Ld_clf,:Ld_rgf,:Ld_gcf,:Ld_qtf;
LOOP

CLOSE BX_CUR1;
实际上应该有多于2条记录的,为什么只出来一条!
我用的数据库是Oracle 8.0.5!!!!
...全文
148 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
sxy2000 2002-05-14
  • 打赏
  • 举报
回复
yuebenxian(飘逸) 的说法只是换个个写法而已!liuzxit的思路是对的!我找到原因了!因为我在中间的一个函数有COMMIT过!
^_^,骚扰各位了!不好意思!
liuzxit 2002-05-13
  • 打赏
  • 举报
回复
寫法絕對沒錯﹐相反"飄逸"的寫法是低效率的﹐因為他對sqlca.slqcode判斷了兩次(while一次﹐if一次)
如果執行
select count(*) FROM jx_wh_bx
WHERE (ct_bxm LIKE :Ls_bxm1) and (length(ct_bxm) > 6);
這句肯定返回值大于1
你跟蹤以下語句sqlca.slqcode的返回值如何
OPEN BX_CUR1;
FETCH BX_CUR1 INTO :Ls_bxm,:Ld_clf,:Ld_rgf,:Ld_gcf,:Ld_qtf;
第二句
FETCH BX_CUR1 INTO :Ls_bxm,:Ld_clf,:Ld_rgf,:Ld_gcf,:Ld_qtf;
qdwangzh 2002-05-13
  • 打赏
  • 举报
回复
可能是autocommit的问题
bixiao_2212 2002-05-13
  • 打赏
  • 举报
回复
不好意思,我写错了,我同意飘逸的看法。
bixiao_2212 2002-05-13
  • 打赏
  • 举报
回复
同意老狼的看法。
小时候的天空 2002-05-13
  • 打赏
  • 举报
回复
不会吧,同意楼上
yuebenxian 2002-05-13
  • 打赏
  • 举报
回复
你的代码,自己跟踪一下!!!!照上面的自己做,应该能够解决!!
sxy2000 2002-05-13
  • 打赏
  • 举报
回复
确实是两条有两条啊!!!~~
pbfighter 2002-05-13
  • 打赏
  • 举报
回复
select count(*) FROM jx_wh_bx
WHERE (ct_bxm LIKE :Ls_bxm1) and (length(ct_bxm) > 6);
值为几?
先做这步看看
pbfighter 2002-05-13
  • 打赏
  • 举报
回复
select count(*) FROM jx_wh_bx
WHERE (ct_bxm LIKE :Ls_bxm1) and (length(ct_bxm) > 6);
值为几?
先检查以下看看为好
hanps 2002-05-13
  • 打赏
  • 举报
回复
同意楼上
zhanwei 2002-05-13
  • 打赏
  • 举报
回复
同意 swjtu95(老狼) 、kaikaihe(开开) ,
先检查一下,不要想当然!
zhanwei 2002-05-13
  • 打赏
  • 举报
回复
同意 swjtu95(老狼) 、kaikaihe(开开) ,
先检查一下,不要想当然!
swjtu95 2002-05-13
  • 打赏
  • 举报
回复
写法没错,照kaikaihe(开开)说的,先看看符合条件的有几条记录
yuebenxian 2002-05-13
  • 打赏
  • 举报
回复
你的顺序错误:如下写:
DECLARE BX_CUR1 CURSOR FOR SELECT ct_bxm,am_clf,am_rgf,am_gcf,am_qtf
FROM jx_wh_bx
WHERE (ct_bxm LIKE :Ls_bxm1) and (length(ct_bxm) > 6);

OPEN BX_CUR1;
do while sqlca.sqlcode=0
FETCH BX_CUR1 INTO :Ls_bxm,:Ld_clf,:Ld_rgf,:Ld_gcf,:Ld_qtf;
/////////////
if sqlca.sqlcode<>0 then exit
loop

就可以了,记得给分!!!
kaikaihe 2002-05-13
  • 打赏
  • 举报
回复
select count(*) FROM jx_wh_bx
WHERE (ct_bxm LIKE :Ls_bxm1) and (length(ct_bxm) > 6);
值为几?

1,076

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 相关问题讨论
社区管理员
  • 基础类社区
  • WorldMobile
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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