Oracle的sqlldr默认为form.Show()
扩展名。我想要覆盖。我不喜欢重命名该文件。当谷歌搜索时,要知道几个答案,使用像.dat
.
那样无效的data='fileName.'
。请分享您的想法。
错误讯息为fileName.dat is not found
。
答案 0 :(得分:1)
Sqlloder具有所有输入文件数据,日志,控制...的默认扩展名。
data= .dat
log= .log
control = .ctl
bad =.bad
PARFILE = .par
但你必须传递没有撇号和点的文件名
sqlloder pass/user@db control=control data=data
sqloader将添加扩展名。 control.ctl data.dat
然而我不明白为什么你不想指定扩展名?
答案 1 :(得分:1)
至少在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/password@db control=file.ctl data=/tmp/${filename##*/}.dat
# clean up
rm -f /tmp/${filename##*/}.dat
然后您可以将其称为:
./scriptfile.sh /path/to/filename
如果您可以在同一目录中创建链接,那么您只需要传递该文件,但如果它在其他地方 - 这可能是必要的,这取决于为什么重命名不是一个选项,并且是可取的无论哪种方式 - 然后你需要传递数据文件的完整路径,以便链接工作。 (如果临时文件属于同一个文件系统,你可以使用硬链接,那么你也不必通过完整的路径,但它仍然更干净。)
由于您还没有显示当前的命令行选项,您可能需要调整它以考虑当前在此处指定的任何内容而不是控制文件,尤其是位置参数实际上是数据文件路径。