如何将CSV数据加载到比csv文件列多的Oracle表中?
问题描述:
我有一个.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中的列?
答
没有什么需要做的。
只发送文件中的列值。
当插入行时,其他列将获得其默认值(通常为NULL,但取决于列定义)。
不知道你的意思与留下其他列的完整,如使用SQL * Loader将只插入新行,没有什么是“原封不动”。
+0
你是对的......它并没有真正做感觉“离开其他列完好无损”......它就像你说的那样工作,问题是没有正确定义触发器......谢谢:P – zetordie 2012-04-03 08:31:09
答
你也可以使用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
你可以在这里使用一个外部表像这样的例子:https://forums.oracle.com/forums/thread.jspa?threadID=545565 – Ollie 2012-04-03 08:21:59