Windows SQLOADER将多个文件加载到一个表中
我使用SQLOADER将多个csv文件加载到一个表中。 这是我的ctl文件的内容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
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请查看