存储过程插入数据

Leo1734 2009-03-24 11:04:07

create or replace procedure TT_PROC
AS
BEGIN
INSERT INTO T4(C1,C2,C3……) -- 数据有400W
SELECT C1,C2,C3 FROM T1,T2 WHERE ……;
commit;
end;

这个存储过程如何优化?
...全文
151 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
Leo1734 2009-03-24
  • 打赏
  • 举报
回复

create or replace procedure TT_prc
as
declare
i number;
begin
i:=0;
loop
INSERT INTO T1(C1,C2,C3……)
SELECT C1,C2,C3……
FROM T2,T3 WHERE ……;
i := i+1;
if mod(i,2000)=0 then
commit;
end loop;
commit;
end;

错在哪里?
Leo1734 2009-03-24
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 whqcfp 的回复:]
一定要绑定的,要不太慢!
[/Quote]
Oracle的是9i,如何做绑定,还有这个分批提交该怎么写?
whqcfp 2009-03-24
  • 打赏
  • 举报
回复
一定要绑定的,要不太慢!
vc555 2009-03-24
  • 打赏
  • 举报
回复
做个批量提交。
Raul_Gonzalez 2009-03-24
  • 打赏
  • 举报
回复
批量绑定,分批提交
zhangdp_neu 2009-03-24
  • 打赏
  • 举报
回复
http://topic.csdn.net/t/20020522/15/743608.html 参看这个文章吧
必须使用批量邦定,你试试这个语句。隐含使用了批量邦定。写法简单了一些。

create or replace procedure TT_prc
as
declare
i number;
begin

MERGE INTO T4 t4
USING SELECT C1,C2,C3 FROM T1,T2 WHERE …… result
ON (1=0)
WHEN NOT MATCHED THEN
INSERT
VALUES (result.C1,result.C2,result.C3……)
WHERE 1=1


commit;
end;
merrill 2009-03-24
  • 打赏
  • 举报
回复
1。你过程里面多了declare先去掉这个

2。 if 和 end if 是在一起使用的

3。你的循环是死循环 你最好 设置个条件 exit when condition;
Leo1734 2009-03-24
  • 打赏
  • 举报
回复
create or replace procedure TT_prc
as
declare
i number;
begin
i:=0;
loop
INSERT INTO T1(C1,C2,C3……)
SELECT C1,C2,C3……
FROM T2,T3 WHERE ……;
i := i+1;
if mod(i,2000)=0 then
commit;
end loop;
commit;
end;

我写了一个存储过程,但是不知道怎么修改,你能告诉我一下怎么修改吗?
zhangdp_neu 2009-03-24
  • 打赏
  • 举报
回复
不好意思,我刚才理解错了你的问题,这个用SQLLoader好像解决不了。
sqlldr是不可以把一个表的数据插入另一个表,只能用insert分批上传。如果有index,trigger先disable掉,提交的时候分批提交。
Leo1734 2009-03-24
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 zhangdp_neu 的回复:]
如果这么大数据量的话最好先把T4索引去掉,插入再加索引。
建议直接使用sqlloader速度会很快的。
[/Quote]


我对Oracle不是很懂,您说的sqlloader不是很清楚的,能说的简单一点吗?
谢谢!
zhangdp_neu 2009-03-24
  • 打赏
  • 举报
回复
如果这么大数据量的话最好先把T4索引去掉,插入再加索引。
建议直接使用sqlloader速度会很快的。
Leo1734 2009-03-24
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 mumu_java 的回复:]
没有退出循环的语句.
[/Quote]
该怎么修改?
mumu_java 2009-03-24
  • 打赏
  • 举报
回复
没有退出循环的语句.

17,089

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧