【问题标题】:Loading data from a dynamic csv file ( file data changes daily/weekly) into a Oracle SQL table将动态 csv 文件中的数据(文件数据每天/每周更改)加载到 Oracle SQL 表中
【发布时间】:2021-04-03 06:46:03
【问题描述】:

我需要从 csv 文件(逗号分隔)将数据加载到 oracle SQL 表中。此 csv 文件数据每天都会更改,由其他团队提供。加载数据后,我将使用该表与现有表连接以获得所需的报告。

我的桌子:

CREATE TABLE CC_TEST 
(
  USERNAME VARCHAR2(30) NOT NULL 
, column2 VARCHAR2(30)  NOT NULL
, column3 VARCHAR2(30)  Primary key 
);

输入 CSV 文件:

USERNAME,column2,Column3
CC1234,adsfasdf,AB34568
CC1864,etwetwee,AB78966
CC7686,knblfklf,AB90867

任何意见将不胜感激。

提前致谢。

【问题讨论】:

  • 创建 .ctl 如下... OPTIONS (SKIP=1) load data infile '/home/oracle/filename.csv' append into table CC_TEST fields by "," ( USERNAME,column2,列3)
  • 谢谢@scott yu。我们可以从 Sql 开发人员工具中运行它吗?也可以将它设置为每天运行,因为 .csv 文件每天都在变化?提前致谢

标签: sql oracle sql-loader


【解决方案1】:

这是你的桌子:

SQL> CREATE TABLE CC_TEST
  2  (
  3    USERNAME VARCHAR2(30) NOT NULL
  4  , column2 VARCHAR2(30)  NOT NULL
  5  , column3 VARCHAR2(30)  Primary key
  6  );

Table created.

控制文件(为简单起见,我在其中包含了示例数据 - 请参阅 begindata 部分。您可以使用带有文件名的 infile 参数):

options (skip=1)
load data 
infile *
replace
into table cc_test
fields terminated by ','
trailing nullcols
( 
username,
column2,
column3
)

begindata
USERNAME,column2,Column3
CC1234,adsfasdf,AB34568
CC1864,etwetwee,AB78966
CC7686,knblfklf,AB90867

测试:

SQL> $sqlldr scott/tiger control=test24.ctl log=test24.log

SQL*Loader: Release 11.2.0.2.0 - Production on Pet Pro 25 19:49:43 2020

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

Commit point reached - logical record count 3

SQL> select * from cc_test;

USERNAME                       COLUMN2                        COLUMN3
------------------------------ ------------------------------ -----------------------
CC1234                         adsfasdf                       AB34568
CC1864                         etwetwee                       AB78966
CC7686                         knblfklf                       AB90867

SQL>

关于您作为 cmets 提出的问题:SQL*Loader 是在操作系统命令提示符下运行的实用程序。由于您每天都会获得新数据,因此我建议您创建一个批处理文件(在 MS Windows 上,这将是 .bat)并将 sqlldr 可执行调用放入其中。然后创建一个作业(在 MS Windows 上,即任务计划程序),它将按您设置的计划运行 .bat 脚本。

【讨论】:

    【解决方案2】:

    您正在询问如何加载文件并且您得到了对该问题的答复。但这真的需要您的业务需求吗? 在 oracle 中,您可以定义外部表。将您的 csv 文件定义为外部表,并在查询中使用它,就像它是普通表一样。无需加载,无需维护中间表。只需定义外部表并在需要时运行您的报告。 Tim Halls 的文章准确地展示了如何做到这一点:https://oracle-base.com/articles/9i/external-tables-9i

    【讨论】:

      【解决方案3】:

      以 sqlldr 用户名/密码 control=testcs.ctl 运行 sqlldr

      【讨论】:

        猜你喜欢
        • 2019-11-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-26
        相关资源
        最近更新 更多