3

我想以 csv 文件的形式将数据导入表中。[使用 Oracle SQL 开发人员]。我有数百个文件,每个文件大约有 50 列。

来自 SQL*Loader 的 wiki (http://www.orafaq.com/wiki/SQL*Loader_FAQ)

 load data
 infile 'c:\data\mydata.csv'
 into table emp
 fields terminated by "," optionally enclosed by '"'          
 ( empno, empname, sal, deptno )  //these are the columns headers

我不想做的是列出所有列标题。我只希望 csv 文件中的所有条目按照它们出现的顺序分配给表中的成员。

此外,毕竟我想我想为所有 100 个文件自动化它。

4

3 回答 3

1

您应该记下列(以及它们的类型可选),以便将 csv 文件的值分配给每一列。您应该这样做,因为在脚本中不知道 Oracle 数据库中表中列的顺序。

按照列在 csv 文件中出现的顺序编写列后,您可以通过键入以下内容为所有文件自动执行此脚本:

infile *.csv
于 2018-06-06T10:08:56.763 回答
0

你可以试试oracle csv loader。它会根据 csv 内容自动创建表和控制文件,并使用 sql loader 将 csv 加载到 oracle 表中。

于 2013-05-02T22:22:07.890 回答
0

执行您正在寻找的操作的 sqlldr 的替代方法是 SQLcl 中的 LOAD 命令。它只是将 csv 中的标题行与表匹配并加载它。然而,这并不像 sqlldr 那样高性能,也没有那么多控制。

LOAD [schema.]table_name[@db_link] file_name

这是它的完整帮助。

sql klrice/klrice
...
KLRICE@xe>help load
LOAD
-----

Loads a comma separated value (csv) file into a table.
The first row of the file must be a header row.  The columns in the header row must match the columns defined on the table.

The columns must be delimited by a comma and may optionally be enclosed in double quotes.
Lines can be terminated with standard line terminators for windows, unix or mac.
File must be encoded UTF8.

The load is processed with 50 rows per batch.
If AUTOCOMMIT is set in SQLCL, a commit is done every 10 batches.
The load is terminated if more than 50 errors are found.

LOAD [schema.]table_name[@db_link] file_name
KLRICE@xe>

来自我在https://github.com/krisrice/maxmind-oracledb的 git repo 的示例

SQL> drop table geo_lite_asn;

Table GEO_LITE_ASN dropped.

SQL> create table geo_lite_asn (
  2     "network" varchar2(32),
  3     "autonomous_system_number" number,
  4     "autonomous_system_organization" varchar2(200))
  5  /

Table GEO_LITE_ASN created.

SQL> load geo_lite_asn GeoLite2-ASN-CSV_20180130/GeoLite2-ASN-Blocks-IPv4.csv
--Number of rows processed: 397,040
--Number of rows in error: 0
0 - SUCCESS: Load processed without errors
SQL> 
于 2018-02-04T13:51:36.077 回答