将数据从动态csv文件(文件数据每天/每周更改)加载到Oracle SQL表中

将数据从动态csv文件(文件数据每天/每周更改)加载到Oracle SQL表中,sql,oracle,sql-loader,Sql,Oracle,Sql Loader,我需要从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,Col

我需要从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
如有任何意见,将不胜感激


提前感谢。

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

以sqlldr用户名/密码控制=testcs.ctl运行sqlldr这是您的表:

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
部分。您可以在文件名中使用
infle
参数):

测试:

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>

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

这是您的表:

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
部分。您可以在文件名中使用
infle
参数):

测试:

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>


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

您询问如何加载文件,并且您得到了对该问题的回答。但是,您的业务需求真的需要这样做吗?
在oracle中,可以定义外部表。将csv文件定义为外部表,并在查询中使用它,就像它是普通表一样。无需加载,无需维护中间表。只要定义外部表并在需要时运行报告即可。蒂姆·霍尔(Tim Halls)的文章准确地展示了如何做到这一点:

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

create.ctl如下所示。。。选项(SKIP=1)加载数据填充“/home/oracle/filename.csv”追加到表CC_测试字段中,以“,”(用户名,第2列,第3列)结尾。谢谢@scott yu。我们可以从SQLDeveloper工具中运行它吗?还可以设置为随着.csv文件每天的更改而每天运行吗?提前感谢Create.ctl,如下所示。。。选项(SKIP=1)加载数据填充“/home/oracle/filename.csv”追加到表CC_测试字段中,以“,”(用户名,第2列,第3列)结尾。谢谢@scott yu。我们可以从SQLDeveloper工具中运行它吗?还可以设置为随着.csv文件每天的更改而每天运行吗?提前谢谢