Atribuindo a saída de uma consulta SQL à variável

10

Estou conectando-me ao banco de dados oracle, acionando uma consulta e atribuindo a saída à variável. Mas, quando ecoo o valor da variável, ela não é impressa corretamente.

count=`sqlplus -s $configuser/$configpass@$ORACLE_SID <<END
           set pagesize 0 feedback off verify off heading off echo off;
           select max(cust_id) from cutomers
           exit;
           END`
           echo $count

A consulta retorna o resultado correto quando acionada no banco de dados. Mas a variável "count" tem valor incorreto.

suni
fonte
1
verifique se o recuo corresponde ao seu código original, agora depois de corrigir a formatação. (. Se partidas, então está errado Você não pode recuar aqui-documentos fechando delimitador assim.)
manatwork
O que é mostrado no modo normal e qual é o valor da contagem ao atribuir?
#

Respostas:

13

A palavra final aqui-doc deve ser os únicos caracteres na linha: não é permitido recuar. Além disso, use em $()vez de backticks - eles são encaixáveis.

count=$(sqlplus -s $configuser/$configpass@$ORACLE_SID <<END
       set pagesize 0 feedback off verify off heading off echo off;
       select max(cust_id) from cutomers
       exit;
END
)
echo $count

http://www.gnu.org/software/bash/manual/bashref.html#Here-Documents

Glenn Jackman
fonte
2
Você também pode usar guias com a <<-ENDnotação. Não espaços, TABS!
Slm
1
OUTPUT=$( ${OracleClientHome}/sqlplus -S user/pass@database <<EOF
set pagesize 0 linesize 32767 feedback off verify off heading off echo off
select a1.id  || '|' ||
       a1.stmt_begin_date  || '|' ||
       a1.stmt_end_date  || '|' ||
       a1.status  || '|' ||
       a1.total_recs 
from acct_stmt_file a1
 where a1.actp_cd = 'HSA'
   and a1.stmt_begin_date =trunc(sysdate);
exit;
EOF
)

echo -e "\n${OUTPUT}"
Tathagata Mukherjee
fonte
1
Por quê? Eu acho que seria melhor se você também compartilhasse suas idéias com a comunidade, não apenas este trecho de script.
peterh - Restabelece Monica
-1
count=`sqlplus -s $configuser/$configpass@$ORACLE_SID <<END
           set pagesize 0 feedback off verify off heading off echo off
           select max(cust_id) from cutomers;
           exit;
           END`

           echo $count

Você precisa usar o ponto e vírgula no lugar certo.

Emaya
fonte
Além disso, o ENDfinal precisa estar nivelado para a esquerda, sem espaço em branco na frente dele.
Kusalananda