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
.