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

问题描述

我需要将数据从 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