数据库中sql语句执行时间太长了
先从一张表select 出来80万条数据然后插入另外一张表
运行一晚上,才插入4万多条记录
我用的是游标
我用过存储过程还是很慢
有什么好的方法? 如果没有其他的字段如: glob,clob
使用sqlldr userid=system/manager control =c:\a.ctl
a.ctl
load java
infile 'a.txt'
append into table a
fields terminated by"|"
(diduan 1,ziduan 2)
这个前提是把另一表的数据倒成txt 文件a.txt create table JF_CKNRJ(
KHNF varchar2(8) not null ,
ZH varchar2(14) NOT NULL ,
YWBH VARCHAR2(6) not null ,
HBLX VARCHAR2(1) not null,
yrj1 NUMBER(16,2),
yrj2 NUMBER(16,2),
yrj3 NUMBER(16,2),
yrj4 NUMBER(16,2),
yrj5 NUMBER(16,2),
yrj6 NUMBER(16,2),
yrj7 NUMBER(16,2),
yrj8 NUMBER(16,2),
yrj9 NUMBER(16,2),
yrj10 NUMBER(16,2),
yrj11 NUMBER(16,2),
yrj12 NUMBER(16,2),
MEMO blob
);
主键: ZH ,YWBH ,HBLX 这三个字段
yrj1到yrj12的字段,是要从另外一张表当中选择日期的月份分别是1-12月份的数据,分别插入
yrj1插入1月的数据
yrj2插入2月的数据
……
每个月份都要检索一遍,时间太长了。每个月份的数据大概是80多万
我现在采用的是游标的方式
declare
v_rj cm2.m_ckmx_ds.rj%type;
v_zh cm2.m_ckmx_ds.zh%type;
v_hblx cm2.m_ckmx_ds.hblx%type;
cursor cursor_nrj IS
select distinct mx.zh,mx.hblx,mx.rj from cp.jf_cknrj nrj,cm2.m_ckmx_ds_bak2 mx
where mx.ywbh=nrj.ywbh and mx.zh=nrj.zh and mx.hblx=nrj.hblx ;
begin
open cursor_nrj;
loop
fetch cursor_nrj into v_zh,v_hblx,v_rj;
exit when cursor_nrj%notfound;
commit;
update cp.jf_cknrj nrj
set nrj.yrj2=v_rj
where nrj.zh=v_zh and nrj.hblx=v_hblx ;
end loop;
close cursor_nrj;
commit;
end; create table JF_CKNRJ(
KHNF varchar2(8) not null ,
ZH varchar2(14) NOT NULL ,
YWBH VARCHAR2(6) not null ,
HBLX VARCHAR2(1) not null,
yrj1 NUMBER(16,2),
yrj2 NUMBER(16,2),
yrj3 NUMBER(16,2),
yrj4 NUMBER(16,2),
yrj5 NUMBER(16,2),
yrj6 NUMBER(16,2),
yrj7 NUMBER(16,2),
yrj8 NUMBER(16,2),
yrj9 NUMBER(16,2),
yrj10 NUMBER(16,2),
yrj11 NUMBER(16,2),
yrj12 NUMBER(16,2),
MEMO blob
);
index :ZH ,YWBH ,HBLX, KHNF
页:
[1]