Variável Unix não é capaz de armazenar saída de consulta sql

0

Estou tendo algum problema ao executar o sql a partir do sqlplus e quero atribuir o / p a uma variável Unix. A saída está mostrando correta no arquivo de log, mas não é atribuída à variável. código:

Variável PASSWD conatins user / password / DB details.

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}

Mesmo eu estou recebendo o / p, ou seja, 1 valor no arquivo de log, mas não atribuindo valor à variável STATUS. Por favor sugira.

    
por user212332 24.02.2017 / 17:52

1 resposta

2

Como você está redirecionando a forma de saída do comando para um arquivo, não há saída para colocar na variável.

Você pode usar o utilitário tee para corrigir isso:

STATUS=$( sqlplus ... <<EOF | tee -a logfile
...
EOF
)

tee duplicará sua entrada para todos os arquivos nomeados, bem como para sua própria saída padrão (que será inserida em sua variável).

Além disso, aspas duplas como "$PASSWD" ou você terá todos os tipos de problemas se a senha contiver caracteres especiais. O mesmo vale para "$STATUS" quando você echo .

    
por 24.02.2017 / 18:04