Asignación de la salida de una consulta SQL a variable

10

Me estoy conectando a la base de datos Oracle y lanzando una consulta y asignando la salida a la variable Pero cuando hago eco del valor de la variable no se imprime correctamente.

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

La consulta devuelve el resultado correcto cuando se dispara en la base de datos. Pero la variable "cuenta" tiene un valor incorrecto.

suni
fuente
1
compruebe si la sangría coincide con su código original, ahora después de corregir el formato. (. Si coincidencias, entonces es incorrecto No se puede sangrar el aquí documentos delimitador de cierre por el estilo.)
manatwork
¿Qué se muestra en modo normal y cuál es el valor de contar al asignar?
ott--

Respuestas:

13

La palabra de terminación here-doc debe ser los únicos caracteres en la línea: no se permite la sangría. Además, use en $()lugar de backticks: son anidables.

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
fuente
2
También puede usar pestañas con la <<-ENDnotación. ¡No espacios, 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
fuente
1
¿Por qué? Creo que sería mejor si compartiera sus ideas con la comunidad, no solo este fragmento de script.
peterh - Restablece a 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

Tienes que usar el punto y coma en el lugar correcto.

Emaya
fuente
Además, el ENDfinal debe estar al ras de la izquierda, sin espacios en blanco delante.
Kusalananda