2017-03-08 63 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文件系統,那麼你可以使用硬鏈接,這樣你就不必傳遞完整的路徑,但這樣做仍然更加清晰)。

當你還沒有表現出你的當前命令行選項,你可能需要調整,要考慮到其他任何你指定當前存在而不是在控制文件中,特別是其位置的說法實際上是數據文件的路徑。