2
回答
oracle11g存储过程循环更新有啥具体讲究?
华为云实践训练营,热门技术免费实践!>>>   

就一个简单的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 ;

(另外,此表主键约和索引啥的都是正常)

望各路大仙指点,敬礼!

 

举报
royalZJ
发帖于3个月前 2回/281阅
顶部