sqloader将文件名保存到表中
我需要将不同的csv文件导入到一个表中。我需要使用sqlloader。(Oracle版本12.1.0.2) 这是我的控制文件:sqloader将文件名保存到表中,sql,oracle,sql-loader,Sql,Oracle,Sql Loader,我需要将不同的csv文件导入到一个表中。我需要使用sqlloader。(Oracle版本12.1.0.2) 这是我的控制文件: load data append into table SAMP_TABLE fields terminated by ',' OPTIONALLY ENCLOSED BY '"' AND '"' trailing nullcols ( FILE_NAME "MyFileName",
load data
append
into table SAMP_TABLE
fields terminated by ','
OPTIONALLY ENCLOSED BY '"' AND '"'
trailing nullcols
(
FILE_NAME "MyFileName",
INSERT_DATE EXPRESSION "current_timestamp(3)"
)
这是我的批处理文件(我需要在windows计算机上执行此操作):
它所做的是,它在开始时创建两个文件夹:“csvFiles”(加载csv文件后将其移动到此文件夹)和“logfiles”(移动创建的日志文件)。(数据为%%F时,我可以将csv文件传递给控制文件)
您可以看到,我的控制文件的前两列是“插入日期”,它插入当前的时间戳和“文件名”
现在我的问题是,我不知道如何将csv文件的文件名(将被加载)传递到控制文件。我希望每个导入csv文件都将此csv文件的文件名插入此列。我搜索了一些解决方案,但其中一些在UNIX中,但我需要在Windows中执行
如果有人能帮助我,我将不胜感激,因为我不太熟悉批处理脚本或脚本
到目前为止,我的解决方案是动态创建控制文件并传递文件名:
我正在尝试动态创建控制文件,但它不起作用。
这是我的批处理文件(我的目录中有csv文件,因此循环应该可以工作):
它只在没有for循环的情况下工作,我不知道为什么。如果有人能帮助我,我将不胜感激。当我执行批处理文件时,它会再次自动关闭。这篇文章将帮助您将csv文件名添加到控制文件中。Thx,但我不确定这是否有效…如果我能够在控制文件(不是文本文件)中搜索字符串。我不太清楚,因为我从未使用过VBScription,你的意思是在执行批处理文件之前,在我的for循环中,我需要执行其他命令吗?例如,在这行后面:“for%%F in(“C:\Users\test*.csv”)do(”我可以使用%%F访问文件名。然后我应该首先搜索我的控制文件,并将此文件名传递到预定义的占位符,然后执行其余的代码?这篇文章提供了一些不同的方法来使用批处理文件修改文档,尽管最广为接受的答案是vbscript。看起来这很理想更新for do循环中的控制文件。另一种方法是动态创建控制文件并将文件名作为参数传递。此帖子将帮助您将csv文件名添加到控制文件中。Thx,但我不确定这是否有效…如果我能够搜索控制文件中的字符串(不是文本文件)。我不太清楚,因为我从未使用过VBScription。您的意思是,在执行批处理文件之前,在我的for循环中,我需要执行其他命令吗?例如,在这行后面:“for%%F in(“C:\Users\test*.csv”)do(”我可以使用%%F访问文件名。然后我应该首先搜索我的控制文件,并将此文件名传递到预定义的占位符,然后执行其余的代码?这篇文章提供了一些不同的方法来使用批处理文件修改文档,尽管最广为接受的答案是vbscript。看起来这很理想更新for do循环中的控制文件。另一种方法是动态创建控制文件,并将文件名作为参数传递
@echo off
IF NOT EXIST C:\Users\test\csvFiles
IF NOT EXIST C:\Users\test\logfiles
for %%F in ("C:\Users\test\*.csv") do (
SET tmpFile=%%F
SET newFile=%tmpFile:~0,-3%.log
sqlldr db_user/db_pw@db_ip CONTROL='C:\Users\test.ctl' LOG='C:\Users\logfiles\%newFile%' "DATA=%%F" skip=1
move %%F C:\Users\test\csvFiles
)
pause
IF NOT EXIST C:\Users\test\csvFiles
IF NOT EXIST C:\Users\test\logfiles
for %%F in ("C:\Users\test\*.csv") do (
echo load data >test1.ctl
echo append >>test1.ctl
echo into table SAMP_TABLE >>test1.ctl
echo fields terminated by ',' >>test1.ctl
echo OPTIONALLY ENCLOSED BY '"' AND '"' >>test1.ctl
echo trailing nullcols >>test1.ctl
echo ( >>test1.ctl
echo FILE_NAME constant "%FF", >>test1.ctl
echo INSERT_DATE EXPRESSION "current_timestamp(3)", >>test1.ctl
echo >>test1.ctl
echo ) >>test1.ctl
SET tmpFile=%%F
SET newFile=%tmpFile:~0,-3%.log
sqlldr db_user/db_pw@db_ip CONTROL='C:\Users\test1.ctl' LOG='C:\Users\logfiles\%newFile%' "DATA=%%F" skip=1
move %%F C:\Users\test\csvFiles
)
pause