Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows SQLOADER将多个文件加载到一个表中_Windows_Oracle_Scripting - Fatal编程技术网

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

Windows SQLOADER将多个文件加载到一个表中,windows,oracle,scripting,Windows,Oracle,Scripting,我使用SQLOADER将多个csv文件加载到一个表中。 这是我的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

我使用SQLOADER将多个csv文件加载到一个表中。 这是我的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文件而不是第二个,我不知道为什么。。?如果有人能告诉我我做错了什么,我将不胜感激

您只需给出多个
infle
请求即可

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

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

@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

我相信你知道,这不是一个免费的代码编写服务。你可以用任何你想要的脚本语言来实现这一点。我的建议是研究Python,因为它是这类工作中最流行的语言之一。我可以在windows中使用shell脚本吗?当然可以,假设您安装了一个mysql客户端来与之接口。我使用的是oracle。我不确定linux commans是否能在windows或path目录上正确执行?问题是,不是静态的文件数…csv文件所在的文件夹将被更新..因此我需要始终获取所有文件..@NoName123如果您是从同一文件夹运行的,您只需给出
*.csv
如果我的文件夹中有10个csv文件,那么我将导入所有文件,但是,文件夹将被更新并包含1个附加文件(因此现在有11个csv文件),然后我只想导入最新添加的文件(不再导入所有文件)…我可以用sqloader实现类似的功能吗?在这种情况下,您唯一的选择是-在批处理文件中。您需要迭代所有文件,然后为循环中的每个文件调用sql loader,并将数据文件移动到其他文件夹中。@NoName123请查看