就一个简单的for循环 update操作 存储过程的语法没啥问题,执行另一个表(100 W+的数据)花费25分钟左右结束,但是执行当前表(44W+的数据)却一直显示执行中,不结束也不报错,强制停止后,发现三四十分钟才update生效了100条左右的数据。不过,在执行存储过程之前,有对此表进行过字段类型的变更操作,如下:
--修改FARE_FAREMAIN表的FARE_NRULEID 的字段类型number(10)为VARCHAR2(20)
-- Add/modify columns (耗时约50秒)
alter table airfare.fare_faremain rename column FARE_NRULEID to FARE_NRULEID_temp;
alter table airfare.fare_faremain add FARE_NRULEID VARCHAR2(20);
update airfare.fare_faremain set FARE_NRULEID = trim(FARE_NRULEID_temp) ;
alter table airfare.fare_faremain drop column FARE_NRULEID_temp;
执行一直不结束的存储过程,如下:
CREATE OR REPLACE PROCEDURE PRO_INIT_faremain_bak0523 AS
BEGIN
FOR OBJFFG IN (select rr.rule_nid a, rf.rf_rulefileid b
from airfare.RULE_RULE rr, airfare.rulefile rf
where rr.rule_nid = rf.rf_ruleid) LOOP
update airfare.FARE_FAREMAIN ff
set ff.fare_nruleid = OBJFFG.b
where ff.fare_nruleid = OBJFFG.a;
COMMIT;
END LOOP;
end ;
(另外,此表主键约和索引啥的都是正常)
望各路大仙指点,敬礼!
你的事务怎么处理的?
createindexi1_FARE_FAREMAINonFARE_FAREMAIN(fare_nruleid);
建上索引,更新就快了。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。