2014-02-06 25 views
0

嗨批處理腳本我想設置一個變量在我的.bat文件使用一個變量,我想使用的變量SQLLDR代碼陳述文件(INFILE)在SQLLDR

這是我在我的bat文件的變量:

set directroy_name= D:\Folder\Folder\Folder\File.csv 

然後在我的命令文件,我有

load data 
infile '%directory_name%' 

當過我嘗試運行從命令提示符.bat文件我剛剛收到SQL_Loader_500:無法打開fi le(%directory_name%.dat

我知道文件在正確的位置?

任何想法爲什麼它這樣做?

回答

1

不,你不能這樣做 - 你期望Oracle可執行文件能夠理解Windows環境變量語法。如果這樣做,它將不得不在Unix中處理$變量等。

您可以直接在命令行上傳遞文件名。在你的控制文件中省略INFILE乾脆,那麼當你調用SQL * Loader的添加一個DATA command-line argument

sqlldr user/password CONTROL=your.ctl DATA=%directory_name% ... 

假設您的變量只是名字古怪的和確實有一個完整的文件路徑,你已經證明。

如果存在的話,INFILE argument will be overridden by the command-line argument,所以你可以包括一個默認的固定值,如果你想的話,我想。

你也似乎有一個錯字;您設置了directroy_name,但後來使用directory_name,這將沒有價值。您需要將其更改爲:

set directory_name= D:\Folder\Folder\Folder\File.csv 
+0

@RichardC - 是的。當然,它不一定是變量,你可以在'DATA'參數中指定完整的文件路徑,但我認爲它在腳本的其他地方被使用。您可能想以相同的方式設置「BAD」文件名等。 –

+0

感謝您的幫助。我編輯了我的sqlldr命令: set directroy_name = D:\ filename.csv sqlldr userid/password @ database control = D:\ file.sql log = D:\ log.log DATA =%directory_name% in my命令文件我得到語法錯誤現在我已經remvoed infile中,它讀取: 負載數據 TRUNCATE 成表的表名由終止 字段「」 TRAILING NULLCOLS (colm1,coml2) – rkyyk

+0

當運行從bat文件命令行我剛剛收到SQL * LOADER-100:語法錯誤在命令行上,不告訴我任何specfic – rkyyk