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.


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


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}"

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.


Además, el ENDfinal debe estar al ras de la izquierda, sin espacios en blanco delante.
Kusalananda
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.