2017-03-08 88 views
1

Oracle的sqlldr默认为.dat扩展名。我想重写。我不喜欢重命名文件。当谷歌搜索得到几个答案使用.data='fileName.'这是行不通的。请分享您的想法。没有.dat扩展名的sql加载器

错误消息是fileName.dat is not found

+1

“*也与添加*尝试” - 你究竟什么尝试?你使用的是什么命令?另外“* not working *”不是来自SQLLoader的有效错误消息。 ** [编辑] **您的问题并添加您使用的命令。请勿**不要在评论中发布代码或其他信息。 –

+2

为什么不能简单地在控制文件中指定正确的文件扩展名? –

+0

@a_horse_with_no_name,文件没有扩展名。另外,不确定在控制文件中扩展名是什么意思。我只知道INFILE,我没有使用,而是发送'sqlldr ...... data ='fileName' – Ramis

回答

1

Sqlloder对所有输入文件中的数据,记录,控制默认扩展...

  • data= .dat
  • log= .log
  • control = .ctl
  • bad =.bad
  • PARFILE = .par

但是你必须通过文件名没有撇号和斑点

sqlloder pass/[email protected] control=control data=data

sqloader将添加扩展名。 control.ctl data.dat

不过我不明白你为什么不想指定扩展名?

+0

我将从外部系统获得一个非常大的文件,我需要重新命名/复制才能添加扩展名。有没有一种方法可以告诉sqlldr不要添加'.dat'扩展名并使用我提供的实际文件名。 – Ramis

+0

data ='文件名'。或data ='文件名'。没关系。 –

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/[email protected] control=file.ctl data=/tmp/${filename##*/}.dat 

# clean up 
rm -f /tmp/${filename##*/}.dat 

然后,您可以调用为:

./scriptfile.sh /path/to/filename 

如果你可以创建在同一目录中的链接,那么你只需要通过该文件,但如果是别的地方 - 这取决于可能需要改名的原因是不是一种选择,和理想的两种方式 - 那么你需要通过数据文件的完整路径,使该链接的作品。 (如果临时文件是int文件系统,那么你可以使用硬链接,这样你就不必传递完整的路径,但这样做仍然更加清晰)。

当你还没有表现出你的当前命令行选项,你可能需要调整,要考虑到其他任何你指定当前存在而不是在控制文件中,特别是其位置的说法实际上是数据文件的路径。