2016-03-21 50 views
0

Oracleデータベースにデータをインポートするスクリプトをいくつか用意する必要がありますが、別のデータベースで実行する必要があります。sqlloaderに値を渡す方法 - Oracle

table1.bat:

sqlldr login/[email protected] control=table1.ctl log=table1.log 
Iはsqlloaderを実行別.BATファイルを用意している各テーブルについて

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

:私はデータと制御ファイルがインポートされる各テーブルについて

私は別のデータベースでそれを実行し、ログイン資格を変更する必要はありませんので、slongとして簡単かつ簡単なソリューションです。

私がしたいのは、各テーブルのスクリプトの読み込みを実行するログインとパスワードを持つ1つのファイルを持つことです。

どうすればいいですか?

よろしく

パヴェルは

+0

は、だから、彼らは個々の 'で使用することができ、その変数を渡し、一つのマスター'ログイン資格情報を使用して変数を設定し、順番に他の '.bat'の各ファイルを呼び出す.bat'ファイルをしたいですsqlldrコマンド?または、1つの表の代わりにすべての 'sqlldr'呼び出しを行う1つの.batファイル? –

答えて

0

私はあなたの質問を理解したいと考えています。

.batファイルでは、任意のデータベースに接続できますが、sqlldr loginによってインポートが開始されるデータベースが決まります。

私はこのような何かを.BATファイルにstart.sqlを呼び出します。他のオプションは、データベース1に関するあなたのコードを書く途中、あなたのスタートファイルにimport_db1.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 

、等

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を実行している状態が表示されず、 'host'が状況に追加されます。代わりに、それぞれの' host'呼び出しで資格情報を指定するだけです。しかし、私は、OPが複数のデータベースに対してスクリプトを一度に実行しようとしているとは思わないが、再利用可能なスクリプトで、実行時に単一のデータベースの資格情報をどのように提供するかという問題があるようだ。 –

0

あなたの問題はあまり明確ではありませんが、サーバーあたりのユーザー名とパスワードを取得したいと思うようです。これはあなたが行うことができますbashのための場合:

sql_password_fileはエントリーがあり
. /dir/to/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... 
関連する問題