免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1237 | 回复: 5
打印 上一主题 下一主题

让我觉得很奇怪的问题,请帮忙 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-06-26 05:23 |只看该作者 |倒序浏览
我要从表B中获取数据更新表A中的部分记录的某些字段,采用存储过程如下:
cursor aa is SELECT c,d,e
        FROM b
       WHERE deal_flag <>; 1;
     fetch aa into v_c,v_d,v_e;
     execute immdiate 'update a set f='||v_c||
               ' ,g='||v_d||
               ' where h='''||v_e||'''';
      i := i+1;
      if i = 5000 then
          commit;
          i :=0;
      end if;

数据库是ORACLE 8.1.7,OS为HP UNIX 11;
结果执行很慢.(选择在晚上执行,数据量约几万条数据)
而且运行完后只更新了部分数据.
请帮忙看看.等待您的回复

论坛徽章:
0
2 [报告]
发表于 2004-06-26 19:55 |只看该作者

让我觉得很奇怪的问题,请帮忙

这能运行吗??还有A表有索引吗,确认A表的H字段和B表的E字段没有空格.

论坛徽章:
0
3 [报告]
发表于 2004-06-27 17:07 |只看该作者

让我觉得很奇怪的问题,请帮忙

可以运行的,速度慢是跟索引有关系

但是结果总是达不到要求。
比如说满足条件的记录有6条

可能只更新了4条;

后面我改写了该过程,速度快了,但还是有一条满足
更新条件的记录没有被更新。


请关注。

论坛徽章:
0
4 [报告]
发表于 2004-06-27 18:23 |只看该作者

让我觉得很奇怪的问题,请帮忙

建议缩小提交的条数
就是达到5条就提交一次

论坛徽章:
0
5 [报告]
发表于 2004-06-28 10:15 |只看该作者

让我觉得很奇怪的问题,请帮忙

你那个if判断语句就暴露问题了,也就是说,i<5000的记录将不会commit

论坛徽章:
0
6 [报告]
发表于 2004-06-28 16:02 |只看该作者

让我觉得很奇怪的问题,请帮忙

不好意思,我在循环最后还有commit语句(忘了写了)

提交次数也缩小到了500。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP