将数据从动态csv文件(文件数据每天/每周更改)加载到Oracle SQL表中
我需要从csv文件(逗号分隔)将数据加载到oracle SQL表中。此csv文件数据每天更改,由其他团队提供。加载数据后,我将使用该表与现有表联接,以获得所需的报告 我的桌子:将数据从动态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
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文件每天的更改而每天运行吗?提前谢谢