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.

관련 정보