Unix変数はSQLクエリ出力を保存できません。

Unix変数はSQLクエリ出力を保存できません。

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

関連情報