将 CSV 文件加载到 Oracle 表中

问题描述 投票:0回答:4

我正在使用 Oracle ApEx,我想知道将单列 csv 文件上传到 Oracle 表中以在 ApEx 中使用的最佳方法是什么?

plsql oracle10g oracle-apex
4个回答
2
投票

我也遇到了和你一样的问题。 您可能已经找到了解决方案,但我按照此链接中的方法操作 http://forums.oracle.com/forums/thread.jspa?threadID=545565 这对我有用。他们使用外部表。最大列数为 50。

其他选项是http://avdeo.com/2008/05/21/uploading-excel-sheet-using-oracle-application-express-apex/ 但是,我发现如果你的 CSV 包含一些特殊字符,它就无法正常运行。

希望这能有所帮助。


0
投票

要使用 SQLLOADER 加载 CSV 文件,您需要执行以下操作:

(a) CSV 文件 (b) SQLLOADER控制文件(也称为CTL文件) (c) SQLLOADER 命令使用 (b) 中的 CTL 文件加载 (a) 中的 CSV 文件。

CSV 文件,您已经有了。对于此示例,文件名是 temp.csv 包含两列

A,100
B,200
C,300
D,400

现在,您需要创建一个控件来描述该文件以及将其加载到哪个表以及如何加载它。对于本例,控制文件名为 temp.ctl,您要加载的表是 TEMP_TABLE,其中包含两列,COLUMN_1 是 VARCHAR2(2),COLUMN_2 是 NUMBER。 temp.ctl 如下所示

LOAD DATA
APPEND
INTO TEMP_TABLE
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
TRAILING NULLCOLS
(
  COLUMN_1 CHAR,
  COLUMN_2 Integer EXTERNAL
)

0
投票

大文件:

  • sqlloader
  • 外部表

小文件:

  • 自己解析

0
投票

你可以用 awk 来完成。

这是有关如何从 .csv 数据填充表格的示例。

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

[oracle@myora ~]$ 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
[oracle@myora ~]$

[oracle@myora ~]$ 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

[oracle@myora ~]$ 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′));
[oracle@myora ~]$

[oracle@myora ~]$ sqlplus myuser/mypwd@myinst

SQL> @RunMe.sql

…

1 row created.

1 row created.

1 row created.

1 row created.

1 row created.

SQL> commit;

Commit complete.

SQL> exit
© www.soinside.com 2019 - 2024. All rights reserved.