2016-10-19 44 views
-1

我有一些與coulmns excel有關的數據,我需要將這些數據從excel遷移到Oracle中的某些表中。我如何以最佳和最快的方式實現這一目標? 我需要從Oracle單個Excel文件中加載5個表格。任何可用於此類任務的工具?這是做ETL工作的最好方法嗎?

+0

你試過搜索嗎? – Aleksej

+0

[將Excel數據表加載到Oracle數據庫]可能的副本(http://stackoverflow.com/questions/120001/load-excel-data-sheet-to-oracle-database) – Aleksej

+0

是啊...到處都是我看到的導入excel到oracle,但這不適用於我,因爲我需要將數據存儲在不同的表中。 – CodingFreak

回答

1

方法可能如下。

說你有兩個表像這些

create table tabA (col_a number, col_b number); 
create table tabB (col_b number, col_c varchar2(10)); 

,你需要加載數據從AA文件開始d:\ FILE.CSV這樣的:

col_a,col_b,col_c 
10,99,"a" 
20,999,"b c d" 

首先需要創建一個目錄,然後建立一個包含CSV的表格:

CREATE DIRECTORY dir_d AS 'D:\'; 
CREATE TABLE csvFile 
(
    Col_a          VARCHAR2(4000), 
    Col_b          VARCHAR2(4000), 
    Col_c          VARCHAR2(4000) 
) 
ORGANIZATION EXTERNAL 
    (TYPE ORACLE_LOADER 
      DEFAULT DIRECTORY dir_d 
       ACCESS PARAMETERS 
     (RECORDS DELIMITED BY NEWLINE 
     SKIP 1 
     FIELDS 
      TERMINATED BY ',' 
      OPTIONALLY ENCLOSED BY '"' 
      LRTRIM 
      MISSING FIELD VALUES ARE NULL 
    ) 
      LOCATION('file.csv')); 

現在,您可以使用SQL從CSV表格開始在表格中插入數據,並使用您需要的每種邏輯;例如:

insert into tabA select col_a, col_b from csvFile; 
insert into tabB select col_b, col_c from csvFile; 

SQL> select * from tabA; 

    COL_A  COL_B 
---------- ---------- 
     10   99 
     20  999 

SQL> select * from tabB; 

    COL_B COL_C 
---------- ---------- 
     99 a 
     999 b c d 
0

,如果你只是想將數據放到一個表,你可以使用的SQLDeveloper數據導入到表中,像秀這個tutorial

0

Oracle的​​工具可以處理多表插入。如果您不希望構建適當的控制文件,可以先使用您選擇的工具將數據加載到臨時表中。

從臨時表,那麼你可以進行單獨的刀片,或使用conditional(?)muti table insert聲明:

insert all into table_a (cola, colb, colc) values (col_a, col_b, col_c) 
      into table_b (cola, colb, colc, cold) values (col_a, col_b, col_c col_d) 
    select col_a, col_b, col_c, col_d from staging_table; 

insert all 
    when col_a < 1000 then 
    into table_a (cola, colb, colc) values (col_a, col_b, col_c) 
    when col_a between 900 and 10000 then 
    into table_b (cola, colb, colc, cold) values (col_a, col_b, col_c col_d) 
    else 
    into table_c (cola, colb, colc, cold) values (col_a, col_b, col_c col_d) 
    select col_a, col_b, col_c, col_d from staging_table; 

與條件插入該評估每個WHEN子句爲true將導致數據被插入到指定的表中,只有當沒有其他選項適用時,ELSE子句纔會起作用。