使用SQL Loader将csv文件导入到表中[但是没有。 [专栏]

时间:2012-06-11 13:11:20

标签: sql oracle sql-loader

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

来自SQL * Loader的维基(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个文件自动化它。

3 个答案:

答案 0 :(得分:1)

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

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

infile *.csv

答案 1 :(得分:0)

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

答案 2 :(得分: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>