Assegnare l'output di una query SQL alla variabile


10

Mi sto collegando al database Oracle, eseguendo una query e assegnando l'output alla variabile Ma quando echo il valore della variabile, questa non viene stampata correttamente.

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 query restituisce il risultato corretto quando viene attivata sul database. Ma la variabile "count" ha un valore errato.


1
controlla se il rientro corrisponde al tuo codice originale, ora dopo aver corretto la formattazione. (Se corrisponde, allora è sbagliato. Non puoi indentare il delimitatore di chiusura dei documenti qui in questo modo.)
Manatwork

Cosa viene mostrato in modalità normale e qual è il valore del conteggio durante l'assegnazione?
ott--

Risposte:


13

La parola che termina qui-doc deve essere l'unico carattere sulla riga: non è consentito alcun rientro. Inoltre, utilizzare al $()posto dei backtick: sono annidabili.

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
Puoi anche usare le schede con la <<-ENDnotazione. Non spazi, 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
Perché? Penso che sarebbe meglio se anche tu condividessi le tue idee con la community, non solo con questo frammento di script.
Peter - Ripristina 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

Devi usare il punto e virgola nel posto giusto.


Inoltre, ENDalla fine deve essere allineato a sinistra, senza spazi bianchi davanti.
Kusalananda
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.