sqlplusでsqlを実行するのに問題があるので、o / pをUnix変数に割り当てたいと思います。出力はログファイルに正しく表示されますが、変数には割り当てられません。パスワード:
PASSWD変数には、ユーザー/パスワード/データベースの詳細が含まれます。
STATUS=`sqlplus -s /nolog <<EOF>> /home/test_db.log
CONNECT ${PASSWD}
WHENEVER OSERROR EXIT FAILURE
WHENEVER SQLERROR EXIT SQL.SQLCODE
set termout off
set showmode off
set heading off
set echo off
set timing off
set time off
set feedback 0
set pagesize 0
set embedded ON
set verify OFF
select status from int_control_tab where rec_no=877 and process_date=to_date('15/02/2017','dd/mm/yyyy');
exit;
EOF`
echo "STATUS :" ${STATUS}
ログファイルにo / p、つまり1つの値が表示されますが、STATUS変数に割り当てられた値はありません。提案してください。
答え1
コマンド出力をファイルにリダイレクトするため、変数に入れる出力はありません。
tee
このユーティリティを使用してこの問題を解決できます。
STATUS=$( sqlplus ... <<EOF | tee -a logfile
...
EOF
)
tee
独自の標準出力(変数に挿入される)だけでなく、名前付きすべてのファイルに入力をコピーします。
また、パスワードの前後に二重引用符を入れてください。"$PASSWD"
そうしないと、パスワードに特殊文字が含まれていると、さまざまな問題が発生します。"$STATUS"
これを行うときも同様ですecho
。