问题描述
我需要将数据从 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
任何输入将不胜感激。
提前致谢。
解决方法
这是你的桌子:
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,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>
就您作为评论提出的问题而言:SQL*Loader 是在操作系统命令提示符下运行的实用程序。由于您每天都会获得新数据,我建议您创建一个批处理文件(在 MS Windows 上,这将是 .bat
)并将 sqlldr
可执行调用放入它。然后创建一个作业(在 MS Windows 上,即任务计划程序),它将按您设置的时间表运行 .bat 脚本。
运行 sqlldr 作为 sqlldr 用户名/密码 control=testcs.ctl