新人求助!PLSQL游标问题

忽悠 2013-05-28 04:16:24
declare
cursor test_Cursor is
select etpcode,max(rptdate) from vRptComFlag where etpcode in (select orgcode from tOrgDrpDisp where chainjymode ='1') and hzflag='1' group by etpcode;
v_orgcode varchar2(10);
v_rptdate varchar2(10);
begin
open test_Cursor;
fetch test_Cursor into v_orgcode,v_rptdate;
while test_Cursor%found loop
update Cmp_test_drp_mf set kcost=(select sum(kccost) from vRptComHzDisSale where orgcode=v_orgcode and rptdate=v_rptdate and orgcode = Cmp_test_drp_mf.orgcode);
fetch test_Cursor into v_orgcode,v_rptdate;
end loop;
close test_Cursor;
end;

Cmp_test_drp_mf 是一个我简历的临时表,
我UPDATE只有最后一行更新了数据,不知道为何,请大神们指教下,谢谢
...全文
78 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
忽悠 2013-05-28
  • 打赏
  • 举报
回复
引用 3 楼 vanjayhsu 的回复:
[quote=引用 2 楼 murphy0410 的回复:] [quote=引用 1 楼 vanjayhsu 的回复:] 你不是只UPDATE了最后一列么?看了下逻辑,好像没必要用游标吧,直接用SQL语句不行吗
由于计算数据过大。。我直接用游标省略了我一次一次执行的过程,我刚才描述有问题,我是更新那一列的最后一行有更新数据,之前的都是空白的,但是我游标初始化时表的第一行啊,为什么不是一次遍历过去,而是最后一列有。[/quote] update Cmp_test_drp_mf set kcost=(select sum(kccost) from vRptComHzDisSale where orgcode=v_orgcode and rptdate=v_rptdate and orgcode = Cmp_test_drp_mf.orgcode) where exists(select 1 from vRptComHzDisSale where orgcode=v_orgcode and rptdate=v_rptdate and orgcode = Cmp_test_drp_mf.orgcode) ; update如果不加WHERE条件都是UPDATE整个表的记录,所以你那个是最后一行满足了条件,其他行不满足,全部UPDATE成NULL了。[/quote] nice,thanks!给分结贴
vanjayhsu 2013-05-28
  • 打赏
  • 举报
回复
引用 2 楼 murphy0410 的回复:
[quote=引用 1 楼 vanjayhsu 的回复:] 你不是只UPDATE了最后一列么?看了下逻辑,好像没必要用游标吧,直接用SQL语句不行吗
由于计算数据过大。。我直接用游标省略了我一次一次执行的过程,我刚才描述有问题,我是更新那一列的最后一行有更新数据,之前的都是空白的,但是我游标初始化时表的第一行啊,为什么不是一次遍历过去,而是最后一列有。[/quote] update Cmp_test_drp_mf set kcost=(select sum(kccost) from vRptComHzDisSale where orgcode=v_orgcode and rptdate=v_rptdate and orgcode = Cmp_test_drp_mf.orgcode) where exists(select 1 from vRptComHzDisSale where orgcode=v_orgcode and rptdate=v_rptdate and orgcode = Cmp_test_drp_mf.orgcode) ; update如果不加WHERE条件都是UPDATE整个表的记录,所以你那个是最后一行满足了条件,其他行不满足,全部UPDATE成NULL了。
忽悠 2013-05-28
  • 打赏
  • 举报
回复
引用 1 楼 vanjayhsu 的回复:
你不是只UPDATE了最后一列么?看了下逻辑,好像没必要用游标吧,直接用SQL语句不行吗
由于计算数据过大。。我直接用游标省略了我一次一次执行的过程,我刚才描述有问题,我是更新那一列的最后一行有更新数据,之前的都是空白的,但是我游标初始化时表的第一行啊,为什么不是一次遍历过去,而是最后一列有。
vanjayhsu 2013-05-28
  • 打赏
  • 举报
回复
你不是只UPDATE了最后一列么?看了下逻辑,好像没必要用游标吧,直接用SQL语句不行吗

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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