2
回答
存储过程已经执行了2小时40分钟了,还没结束。。。。。。
科大讯飞通用文字识别100000次/天免费使用。立即申请   
create or replace procedure adduser is
uc t_sap_user.user_code%type;
un t_sap_user.user_name%type;
numb number;
cursor cur1 is select s.user_code,s.user_name from t_sap_user s;
begin
  for cur1_rec in cur1 loop
    uc:=cur1_rec.user_code;
    un:=cur1_rec.user_name;
    select count(*) into numb from test_user where usercode = uc;
    if numb =0 then
      begin
        insert into test_user (usercode,username) values(uc,un);
        commit;
      end;
    else
      begin
        update test_user set username=un where usercode=uc;
        commit;
      end;
      end if;
      end loop;
end adduser;

数据量有20万条,该怎么优化下

举报

1.commit次数太多,应该放在end loop外面。

2.逻辑你也可以改一改,两张表联合查询,找出所有s表中有,test表也有的数据,这部分数据在test表中批量删除,再把所有s表中的数据批量插入test表中。

引用来自“士别三日”的评论

1.commit次数太多,应该放在end loop外面。

2.逻辑你也可以改一改,两张表联合查询,找出所有s表中有,test表也有的数据,这部分数据在test表中批量删除,再把所有s表中的数据批量插入test表中。

一次提交太多条会不会把数据库干崩或者影响其他的 。oracle如何控制 每次提交的条数

--- 共有 1 条评论 ---
士别三日不会,提交一千万数据和一条数据相差不大,你可以网上查原理 10个月前 回复
顶部