第一份工玩MSSQL,第二份玩DB2,第三份ORACLE,快玩遍了……
闲话少说,转入正题:
最近在写一个SP,每天往一个结果表更新数据,数据量大约200万行上下。
原来想用MERGE去做,不过MERGE似乎无法做到把已删除的记录同步删除,只能insert和update,所以不行。也可能是我不懂怎么删,如有办法的朋友请指教。
后来就想先删除旧数据再插回去,不过肯定要做成分段commit啦……于是写了这段语句(只是insert的部分),原意是想每计数2000次就commit一次,可是实际跑这个SP,发现一直都没有做commit,搞不懂哪里写错了,请各位指点迷津,谢谢!V_ROW NUMBER:=0;for r_cur in (select a from tbl) loop V_ROW:=V_ROW+1; insert into tbl_target
select * from tbl_source where f1=r_cur.a;
--这句每次只会插入大约200条记录
if MOD(V_ROW,2000)=0 then
commit;
end if;end loop;
commit;
闲话少说,转入正题:
最近在写一个SP,每天往一个结果表更新数据,数据量大约200万行上下。
原来想用MERGE去做,不过MERGE似乎无法做到把已删除的记录同步删除,只能insert和update,所以不行。也可能是我不懂怎么删,如有办法的朋友请指教。
后来就想先删除旧数据再插回去,不过肯定要做成分段commit啦……于是写了这段语句(只是insert的部分),原意是想每计数2000次就commit一次,可是实际跑这个SP,发现一直都没有做commit,搞不懂哪里写错了,请各位指点迷津,谢谢!V_ROW NUMBER:=0;for r_cur in (select a from tbl) loop V_ROW:=V_ROW+1; insert into tbl_target
select * from tbl_source where f1=r_cur.a;
--这句每次只会插入大约200条记录
if MOD(V_ROW,2000)=0 then
commit;
end if;end loop;
commit;
解决方案 »
- 求教想要下面的结果sql该怎么写?
- 求 plsql 代码 查询语句一句
- 更改主机名出现的问题?
- 闪闪红星,放光芒。。。。。终于变成红星了,同喜同喜
- oracle下table中数据的标识问题
- oracle8.17与oracle7.3的链路问题
- 高分请教一个小问题
- 关于oralce9i下的pro*cobol编程(大侠帮忙!)
- ORA-29547: Java 系统类不可用: oracle/aurora/rdbms/Compiler?
- oracle同一字段根据条件进行拼接
- 监听程序添加地址时出现“要求有效的日志文件”?我有监听器,listener.ora文件和tnsnames.ora文件都有,都配置好了。。。
- oracle listener.ora tnsnames.ora sqlnet.ora 问题
耗时间的就是INSERT提交很快吧
Loop
insert into tbl_target
select * from tbl_source where f1=i;
If mod(i, 2000) = 0 then
Commit;
End if;
End loop;
commit;
你检查下
我按照你的写了个测试的,完全没问题。
declare
V_ROW NUMBER:=0;
begin
for r_cur in (select empno from emp) loop V_ROW:=V_ROW+1; insert into temp_emp
select * from emp where empno=r_cur.empno;
--这句每次只会插入大约200条记录
if MOD(V_ROW,10)=0 then
commit;
end if;
end loop;
commit;
end;
FOR R_CUR IN (SELECT A FROM TBL) LOOP
V_ROW := V_ROW + 1;
INSERT INTO TBL_TARGET
SELECT * FROM TBL_SOURCE WHERE F1 = R_CUR.A;
IF V_ROW = 2000 THEN
V_ROW := 0;
COMMIT;
END IF;
END LOOP;
COMMIT;
INSERT INTO TBL_TARGET
SELECT * FROM TBL_SOURCE,TBL WHERE TBL_SOURCE.F1=TBL.A;
基本上是差不多的!commit100次也花不了多少时间的。