【问题标题】:import csv file into table using SQL Loader [but large no. of Columns]使用 SQL 加载器将 csv 文件导入表中 [但没有。列数]
【发布时间】:2018-06-06 18:08:56
【问题描述】:

我想将数据以csv文件的形式导入到一个表中。[使用Oracle SQL developer]。我有这么一百个文件,每个文件大约有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 个文件自动化它。

【问题讨论】:

  • 写东西可能比手动写要花更长的时间。只需将 CSV 文件中的标题复制并粘贴到代码中,您需要做的就是添加逗号。
  • 如果您不想分配字段名称,则文件中每条记录中的字段数必须与表中的字段数相同。您使用的是什么操作系统? UNIX 或 unix 工具包可以用最少的编码工作来做到这一点。
  • @jimmcnamara ,是的,没有相同的。记录文件和表格中的字段。我正在使用 Windows
  • 在这样的情况下(行数很少,我认为它是一次性的)我使用 excel。打开 CSV 文件,另存为 xls,然后为每一行构建一个插入语句,引用列中的数据。用分号结束每一行,剪切并粘贴到您最喜欢的数据库工具中,然后点击运行按钮。您可以使用一些 vb 脚本自动执行 100 个文件。总之,我发现它通常比使用块导入器更简单。

标签: sql oracle sql-loader


【解决方案1】:

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

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

infile *.csv

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      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> 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-02-03
        • 2017-12-14
        • 2010-11-05
        • 1970-01-01
        • 2014-12-01
        • 1970-01-01
        • 2011-03-27
        • 1970-01-01
        相关资源
        最近更新 更多