SQLOADER将多个文件加载到一个表中

时间:2017-07-10 15:32:51

标签: windows oracle scripting

我正在使用SQLOADER将多个csv文件加载到1个表中。 这是我的ctl文件的内容

load data 
append
into table SAMP_TABLE
fields terminated by ','
OPTIONALLY ENCLOSED BY '"' AND '"'
trailing nullcols
           ( COLUMN1 CHAR(4000),
             COLUMN2 CHAR(4000),
             COLUMN3 CHAR(4000)
           )

这是我的批处理文件

@echo off
for %%F in ("C:\Users\test\*.csv") do (
sqlldr username/pw@dbip CONTROL='C:\Users\test\test2.ctl' LOG='C:\Users\test\TEST.log' "DATA=%%F" 
)
pause

我的所有csv文件,控制文件和批处理文件都在同一目录中。  我有两个csv文件,相同的列只有不同的内容。问题  现在它只导入第一个csv文件而不是第二个,我不知道为什么..?如果有人能告诉我我做错了什么,我将不胜感激

2 个答案:

答案 0 :(得分:0)

您只需提供多个infile次请求

load data 
infile 'data1.csv'
infile 'data2.csv'
...
infile 'datan.csv'
append
into table TABLE1
fields terminated by ','
OPTIONALLY ENCLOSED BY '"' AND '"'
trailing nullcols
           ( COLUMN1 CHAR(4000),
             COLUMN2 CHAR(4000),
             COLUMN3 CHAR(4000)
           )

如果文件始终存在于同一文件夹中

infile /path/*.csv

答案 1 :(得分:0)

您好,这是我的问题的解决方案:

@echo off

    IF NOT EXIST C:\Users\test\%date:~-10,2%"-"%date:~-7,2%"-"%date:~-4,4% md C:\Users\test\%date:~-10,2%"-"%date:~-7,2%"-"%date:~-4,4%
    for %%F in ("C:\Users\test\*.csv") do (
    sqlldr dbuser/dbpw@dbip CONTROL='C:\Users\test.ctl' LOG='C:\Users\test\%date:~-10,2%"-"%date:~-7,2%"-"%date:~-4,4%\%date:~-10,2%"-"%date:~-7,2%"-"%date:~-4,4%.log' "DATA=%%F" skip=1  
    move %%F C:\Users\test\%date:~-10,2%"-"%date:~-7,2%"-"%date:~-4,4%
    )
    pause