1

次のコードを含むシェル スクリプトがあります。

sqlldr $ws_usr_eva/$ws_pass_eva@$ws_esq_eva CONTROL=/$HOME/controlfiles/CONTROL_FILE.CTL LOG=/$HOME/batch/log/LOG_FILE.$fecfile.log DATA=/$HOME/batch/input/INPUT_FILE_$fecfile.txt > /$HOME/batch/log/result_loader_eva.ora

変数 $ws_usr_eva、$ws_pass_eva、および $ws_esq_eva は、sqlldr を実行する前に入力されます。内容は確認済みでOKです。

そのため、スクリプトを実行すると、次のように表示されます: LRM-00112: 複数の値がパラメーター 'control' に許可されていません

変数なしでスクリプトを実行しようとしましたが、正常に動作します。

sqlldr user/pwd@schema CONTROL=/$HOME/controlfiles/CONTROL_FILE.CTL LOG=/$HOME/batch/log/LOG_FILE.$fecfile.log DATA=/$HOME/batch/input/INPUT_FILE_$fecfile.txt > /$HOME/batch/log/result_loader_eva.ora

構成ファイルから変数を読み取るため、sqlldr で変数を使用する必要があります。

私も sqlldr userid=$ws_usr_eva/$ws_pass_eva@$ws_esq_eva を試してみましたが、うまくいきませんでした。

手伝って頂けますか?

前もって感謝します。

4

2 に答える 2

3

誰にでも役立つ場合は、パス (データ、コントロール、ログ) を単一のクォートで囲む必要があります。二重引用符は機能しません (ただし、sqlldr は文句を言わず、単に二重引用符を無視します)。

于 2013-05-16T18:10:00.327 に答える
0

シェルで、変数をエスケープしてみてください::

sqlldr "${ws_usr_eva}/${ws_pass_eva}@${ws_esq_eva}" "CONTROL=${HOME}/controlfiles/CONTROL_FILE.CTL" "LOG=${HOME}/batch/log/LOG_FILE.${fecfile}.log" "DATA=${HOME}/batch/input/INPUT_FILE_${fecfile}.txt" > "${HOME}/batch/log/result_loader_eva.ora"
于 2011-10-13T08:11:25.303 に答える