2016-03-21 77 views
0

我必須準備幾個將數據導入Oracle數據庫的腳本,但我必須在不同的數據庫上運行它。 對於每個表要導入我有一個數據和控制文件:如何將值傳遞到sqlloader中 - Oracle

table1.dat 
table1.ctl 
table2.dat 
table2.ctl 
etc.. 

對於運行SQLLOADER我已經準備單獨的bat文件的每個表:

table1.bat:

sqlldr login/[email protected] control=table1.ctl log=table1.log 

由於我不需要在不同的數據庫上運行它並更改登錄憑證,因此它非常簡單易行。

我wolud喜歡做的是用登錄名和密碼爲每個表運行加載腳本的文件。

你有什麼建議可以做到嗎?

問候

帕維爾

+0

所以,你要一個主',設置一個變量的登錄憑據,然後調用每個依次其他'.bat'文件.bat'文件,通過該變量,他們可以在自己的個人使用' sqlldr命令?還是一個.bat文件,它可以完成所有的'sqlldr'調用,而不是每個表一個? –

回答

0

我希望我理解你的問題。

在您的.bat文件中,您可以連接到任何數據庫,但您sqlldr登錄決定在哪個數據庫上啓動導入。

我會打電話的.bat文件一start.sql,我做這樣的事情:

-- database 1 
host sqlldr login/[email protected] control=table1.ctl log=table1_db1.log 
host sqlldr login/[email protected] control=table2.ctl log=table2_db1.log 

-- database 2 
host sqlldr login/[email protected] control=table1.ctl log=table1_db2.log 
host sqlldr login/[email protected] control=table2.ctl log=table2_db2.log 

的另一個選項是調用import_db1.sql在起始文件帶寫關於數據庫1碼等

start.sql

@@import_db1.sql 
@@import_db2.sql 

import_db1.sql

-- database 1 
host sqlldr login/[email protected] control=table1.ctl log=table1_db1.log data=csvfile.csv 
host sqlldr login/[email protected] control=table2.ctl log=table2_db1.log data=csvfile.csv 

+1

這似乎是嘗試在SQL \ * Plus中將'sqlldr'作爲命令運行。它是一個單獨的可執行文件,可以從O/S命令行運行。你可以用'host'調出,但是你仍然需要在這些命令中提供正確的憑證,所以我不確定這有什麼用處? –

+0

你是對的@AlexPoole,主機必須在答案。我編輯它。複製+粘貼並不總是足夠;-) – massie

+0

我沒有看到運行SQL \ * Plus的東西,然後「主機」增加了這種情況,但是您只需在每個「主機」調用中提供憑據。但是,我也不認爲OP正嘗試同時對多個數據庫運行腳本,這個問題似乎是關於如何在運行時在可重用腳本中爲單個數據庫提供憑據? –

0

你的問題不是很清楚,但它聽起來像你只是想每個服務器的用戶名/密碼。在這種情況下,對於bash,那麼你可以這樣做:

. /dir/to/file/.sql_password_file 

其中sql_password_file具有項:

SQLLDRLOGON='user/pass' 

然後在你的腳本,你可以做

sqlldr userid=$SQLLDRLOGON control=table1.ctl log=table1.log 

我會考慮改變你的腳本到一個循環也是如此

for load in table1 table2 
do 
loads="control=${load}.ctl bad=${load}.bad log=${load}.log" 
sqlldr $SQLLDRLOGON $loads 
etc...