我要做的是从一个表导入到另一个结构相同的表,如果重复插入,不重复,更新,这样写的命令更新速度太慢,请大家帮忙看看!
UPDATE MAIN_PAS X SET AMOUNT=X.AMOUNT+
(SELECT SUM(AMOUNT) AMOUNT  FROM temp_import b WHERE  b.VEHICLECD=x.VEHICLECD and b.MODELCD=x.MODELCD  and b.BRANDCD=x.BRANDCD 
and b.DISBRANDCD=x.DISBRANDCD and b.MAKERCD=x.MAKERCD and  b.COLORCD=x.COLORCD  and b.DISMAKERCD=x.DISMAKERCD and b.GROUPCD=x.GROUPCD  and b.OLDSEGMENT=x.OLDSEGMENT and b.CLASS1CD=x.CLASS1CD 
and b.CLASS2CD=x.CLASS2CD  and b.CLASS3=x.CLASS3CD    and b.BODYTYPE=x.BODYTYPE  and b.DOMECBUCD=x.DOMECBUCD and  b.PROVINCECD=x.PROVINCECD  and b.CITYCD=x.CITYCD  and
b.DISTRICTCD  =x.DISTRICTCD   and b.POSTALCODE=x.POSTALCODE   and b.REGYEARMONTH=x.REGYEARMONTH  and b.USAGECD=x.USAGECD  and b.ACQUISITIONCD=x.ACQUISITIONCD    and  b. VIN =x. VIN  and b.OWNERSHIPCD=x.OWNERSHIPCD 
and b.COUNTRYCD=x.COUNTRYCD and b.DISCOUNTRYCD and b.ENGINE=x.ENGINE  and b.FUELCD=x.FUELCD and  b.DISPLACEMENT=x.DISPLACEMENT  and b.TRANSMISSIONCD=x.TRANSMISSIONCD  and   b.GEARCD=x.GEARCD  and b. PRICE=x.PRICE  
and b.OWNERYEAR=x.OWNERYEAR

解决方案 »

  1.   

    如果是9i可以用mergeMEGRE INTO MAIN_PAS X
    USING (SELECT .........,SUM(AMOUNT) AMOUNT FROM temp_import GROUP BY .....) B
    ON (b.VEHICLECD=x.VEHICLECD AND ... AND ...)
    WHEN MATCHED THEN
    UPDATE SET X.AMOUNT=X.AMOUNT+B.AMOUNT
    WHEN NOT MATCHED THEN
    INSERT (X.,X.,...) VALUES(B.,B.,...)
    /
      

  2.   

    用procedure把declare 
      -- Local variables here
      i integer;
      result varchar2(10);
    begin
      -- Test statements here
      begin
           insert into aud_type(app_code,aud_type,aud_item_code,aud_item_name) values('1','1','1','a');
           result := 'OK';
      exception
           when DUP_VAL_ON_INDEX then
               begin
                    update aud_type set aud_item_name = 'a' where app_code ='1' and aud_type='1' and aud_item_code='1';
                    result := 'OK';
               exception
                   when others then
                   result := 'ERR'; 
               end;
            when others then
                 result := 'ERR';
      end;
    end;把这个改成Procedure
      

  3.   

    我用的是9i正在尝试你说的merge,谢谢
      

  4.   

    insert into main_pas value(select * from
    (
    select * from aud_type
    minus
    select * from MAIN_PAS
    );
    这样能行吗? 看热闹的.