![Unix 변수는 SQL 쿼리 출력을 저장할 수 없습니다.](https://linux55.com/image/106292/Unix%20%EB%B3%80%EC%88%98%EB%8A%94%20SQL%20%EC%BF%BC%EB%A6%AC%20%EC%B6%9C%EB%A0%A5%EC%9D%84%20%EC%A0%80%EC%9E%A5%ED%95%A0%20%EC%88%98%20%EC%97%86%EC%8A%B5%EB%8B%88%EB%8B%A4..png)
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
.