2012-04-03 98 views
2

我有一個.csv文件,其中只包含表中某些列的數據。如何將.csv導入到表中,使其他列保持原樣(或設置NULL值)?如何將CSV數據加載到比csv文件列多的Oracle表中?

最初的表有相同的列.csv文件,我就是用這個SQL裝載機:

LOAD DATA 
INFILE '"Path"/file.csv' 
APPEND 
INTO TABLE MY_TABLE 
FIELDS TERMINATED BY ';' OPTIONALLY ENCLOSED BY '"' 
(
    COLUMN1, 
    COLUMN2, 
    COLUMN3, 
    COLUMN4, 
    COLUMN5 
) 

但後來我不得不添加表需要與數據更新一些列其他表,並且當從初始列的.csv插入數據時,我想更新它們(使用觸發器)。那麼如何在表格中導入.csv中的列?

+0

你可以在這裏使用一個外部表像這樣的例子:https://forums.oracle.com/forums/thread.jspa?threadID=545565 – Ollie 2012-04-03 08:21:59

回答

3

沒有什麼需要做的。

只發送文件中的列值。

當插入行時,其他列將獲得其默認值(通常爲NULL,但取決於列定義)。

不知道你的意思與留下其他列的完整,如使用SQL * Loader將插入新行,沒有什麼是「原封不動」。

+0

你是對的......它並沒有真正做感覺「離開其他列完好無損」......它就像你說的那樣工作,問題是沒有正確定義觸發器......謝謝:P – zetordie 2012-04-03 08:31:09

0

你也可以使用awk。

以下是有關如何根據CSV文件中的值組合SQL查詢的詳細示例。

SQL> create table MY_TABLE(a varchar2(100), b varchar2(100)); 

[[email protected] ~]$ tail Some_Input_CSV_file 
Some Data A 1,Some Data B 1 
Some Data A 2,Some Data B 2 
Some Data A 3,Some Data B 3 
Some Data A 4,Some Data B 4 
Some Data A 5,Some Data B 5 
Some Data A 6,Some Data B 6 
Some Data A 7,Some Data B 7 
Some Data A 8,Some Data B 8 
Some Data A 9,Some Data B 9 
Some Data A 10,Some Data B 10 
[[email protected] ~]$ 

[[email protected] ~]$ cat Some_Input_CSV_file | awk -F, ‘ { printf(「insert into MY_TABLE values(trim(\x27%s\x27), trim(\x27%s\x27));\n」, $1, $2); } ‘ > RunMe.sql 

[[email protected] ~]$ tail RunMe.sql 
insert into MY_TABLE values(trim(‘Some Data A 1′), trim(‘Some Data B 1′)); 
insert into MY_TABLE values(trim(‘Some Data A 2′), trim(‘Some Data B 2′)); 
insert into MY_TABLE values(trim(‘Some Data A 3′), trim(‘Some Data B 3′)); 
insert into MY_TABLE values(trim(‘Some Data A 4′), trim(‘Some Data B 4′)); 
insert into MY_TABLE values(trim(‘Some Data A 5′), trim(‘Some Data B 5′)); 
insert into MY_TABLE values(trim(‘Some Data A 6′), trim(‘Some Data B 6′)); 
insert into MY_TABLE values(trim(‘Some Data A 7′), trim(‘Some Data B 7′)); 
insert into MY_TABLE values(trim(‘Some Data A 8′), trim(‘Some Data B 8′)); 
insert into MY_TABLE values(trim(‘Some Data A 9′), trim(‘Some Data B 9′)); 
insert into MY_TABLE values(trim(‘Some Data A 10′), trim(‘Some Data B 10′)); 
[[email protected] ~]$ 

[[email protected] ~]$ sqlplus myuser/[email protected] 

SQL> @RunMe.sql 

… 

1 row created. 

1 row created. 

1 row created. 

1 row created. 

1 row created. 

SQL> commit; 

Commit complete. 

SQL> exit 
相關問題