2016-10-24 79 views
0

以下のようなスクリプトがあります。私は、スクリプトを実行するとbashスクリプトで変数をsqlplusに渡す方法

#!/bin/bash 

year=`date +%Y` 
month=`date +%m` 
day=`date +%d` 
prefixe=$month$day$year 
logfile="/home/oracle/logs/exec_proc_daily_20_"$prefixe.log 

sqlplus/"as sysdba" <<EOF 
spool on 
spool $logfile 
execute Proc_RFC_MAJ_MV_ITIN; 
execute Proc_RFC_MAJ_MV_REFGEO; 
commit; 
quit 
EOF 

は、spool $logfileがエラーを与える:私の目標は、ファイル名やスプールなどのファイルに現在の日付と時刻と終了のログファイルへの書き込みです。ログは作成されません。しかし、私はspool exec_proc_daily_2o.logのようなものを使うとうまくいきます。変数$logfileがなぜ置き換えられないのですか?

+0

を交換します'sqlplus /" as sysdba "'を 'cat'とし、あなたのスクリプトを実行すると、変数replacementが_is_が期待どおりに動作していることが示唆されます... – Stygies

答えて

2

掘削をたくさんした後、私は問題の解決策を見つけました。行sqlplus/"as sysdba" <<EOFに、私はこのsqlplus/as sysdba <<EOF >$logfileのような変数を渡しました。だから、完全なコードは次のようになります。

#!/bin/bash 

year=`date +%Y` 
month=`date +%m` 
day=`date +%d` 
prefixe=$month$day$year 
logfile="/home/oracle/logs/exec_proc_daily_20_"$prefixe.log 

sqlplus/"as sysdba" <<EOF >$logfile 
spool on 
spool $logfile 
execute Proc_RFC_MAJ_MV_ITIN; 
execute Proc_RFC_MAJ_MV_REFGEO; 
commit; 
quit 
EOF 
+0

sqlplusコマンドがsqlplusの出力を$ logfileにリダイレクトしています。 – Beege

0

[実施例で編集] SQLPLUSする変数を渡します。

demo.sh

export myvar1="hello" 
export myvar2=123 
sqlplus "/ as sysdba" @demo.sql $myvar1 $myvar2 
echo "---shell is complete---" 

demo.sql

select 'first variable is &1 and second is &2' 
from dual; 
exit 
+0

こんにちは@Beege。あなたのご意見ありがとうございます。あなたのアプローチを試みましたが、うまくいきません。 sqlplusコマンドの使い方が間違っているというメッセージが表示され、使用方法に関する提案が表示されます。 –

関連する問題