Erp100论坛's Archiver

xiangzhao 发表于 2008-7-12 21:20

数据库中sql语句执行时间太长了

先从一张表select 出来80万条数据
然后插入另外一张表
运行一晚上,才插入4万多条记录

我用的是游标

我用过存储过程还是很慢
有什么好的方法?

xiangzhao 发表于 2008-7-12 21:20

如果没有其他的字段如: 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

xiangzhao 发表于 2008-7-12 21:22

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;

xiangzhao 发表于 2008-7-12 21:22

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]

Powered by Discuz! Archiver 7.0.0  © 2001-2007 Comsenz Inc.