Oracle的sqlldr默认为.dat
扩展名。我想重写。我不喜欢重命名文件。当谷歌搜索得到几个答案使用.
像data='fileName.'
这是行不通的。请分享您的想法。没有.dat扩展名的sql加载器
错误消息是fileName.dat is not found
。
Oracle的sqlldr默认为.dat
扩展名。我想重写。我不喜欢重命名文件。当谷歌搜索得到几个答案使用.
像data='fileName.'
这是行不通的。请分享您的想法。没有.dat扩展名的sql加载器
错误消息是fileName.dat is not found
。
Sqlloder对所有输入文件中的数据,记录,控制默认扩展...
data= .dat
log= .log
control = .ctl
bad =.bad
PARFILE = .par
但是你必须通过文件名没有撇号和斑点
sqlloder pass/[email protected] control=control data=data
sqloader将添加扩展名。 control.ctl data.dat
不过我不明白你为什么不想指定扩展名?
我将从外部系统获得一个非常大的文件,我需要重新命名/复制才能添加扩展名。有没有一种方法可以告诉sqlldr不要添加'.dat'扩展名并使用我提供的实际文件名。 – Ramis
data ='文件名'。或data ='文件名'。没关系。 –
你至少在Unix/Linux环境下是不行的。在Windows中,您可以使用尾随技巧,在控制文件中指定INFILE 'filename.'
或在命令行中指定DATA=filename.
。 WIndows文件名处理允许;你可以在命令提示符下执行DIR filename.
,它将列出没有扩展名的文件(DIR filename
也是如此)。但是你不能用* nix,从shell提示符或其他任何地方执行该操作。
你说你不想复制或重命名文件。暂时重命名可能是最简单的解决方案,但你可能有一个理由不这样做,甚至一度可以转而创建一个硬或软链接到不有一个扩展名的文件,并使用该链接为目标,而不是。你可以包装在一个shell脚本,它的文件名参数:
# set variable from correct positional parameter; if you pass in the control
# file name or other options, this might not be $1 so adjust as needed
# if the tmeproary file won't be int he same directory, need to be full path
filename=$1
# optionally check file exists, is readable, etc. but overkill for demo
# can also check temporary file does not already exist - stop or remove
# create soft link somewhere it won't impact any other processes
ln -s ${filename} /tmp/${filename##*/}.dat
# run SQL*Loader with soft link as target
sqlldr user/[email protected] control=file.ctl data=/tmp/${filename##*/}.dat
# clean up
rm -f /tmp/${filename##*/}.dat
然后,您可以调用为:
./scriptfile.sh /path/to/filename
如果你可以创建在同一目录中的链接,那么你只需要通过该文件,但如果是别的地方 - 这取决于可能需要改名的原因是不是一种选择,和理想的两种方式 - 那么你需要通过数据文件的完整路径,使该链接的作品。 (如果临时文件是int文件系统,那么你可以使用硬链接,这样你就不必传递完整的路径,但这样做仍然更加清晰)。
当你还没有表现出你的当前命令行选项,你可能需要调整,要考虑到其他任何你指定当前存在而不是在控制文件中,特别是其位置的说法实际上是数据文件的路径。
“*也与添加*尝试” - 你究竟什么尝试?你使用的是什么命令?另外“* not working *”不是来自SQLLoader的有效错误消息。 ** [编辑] **您的问题并添加您使用的命令。请勿**不要在评论中发布代码或其他信息。 –
为什么不能简单地在控制文件中指定正确的文件扩展名? –
@a_horse_with_no_name,文件没有扩展名。另外,不确定在控制文件中扩展名是什么意思。我只知道INFILE,我没有使用,而是发送'sqlldr ...... data ='fileName' – Ramis