Zuweisen der Ausgabe einer SQL-Abfrage zur Variablen

10

Ich stelle eine Verbindung zur Oracle-Datenbank her, löse eine Abfrage und weise die Ausgabe der Variablen zu. Wenn ich jedoch den Wert der Variablen wiedergebe, wird sie nicht richtig gedruckt.

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

Die Abfrage gibt das korrekte Ergebnis zurück, wenn sie in der Datenbank ausgelöst wird. Die Variable "count" hat jedoch einen falschen Wert.

Suni
quelle
1
Bitte überprüfen Sie, ob der Einzug mit Ihrem Originalcode übereinstimmt, nachdem ich die Formatierung korrigiert habe. (Wenn Übereinstimmungen, dann ist es falsch. Sie können das schließende Trennzeichen der hier-Dokumente nicht so
einrücken
Was wird im normalen Modus angezeigt und wie hoch ist der Wert beim Zuweisen?
ott--

Antworten:

13

Das abschließende Here-Doc-Wort muss das einzige Zeichen in der Zeile sein: Einzug nicht zulässig. Verwenden Sie auch $()anstelle von Backticks - sie sind verschachtelbar.

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
quelle
2
Sie können auch Registerkarten mit der <<-ENDNotation verwenden. Keine Leerzeichen, 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
quelle
1
Warum? Ich denke, es wäre besser, wenn Sie Ihre Ideen auch der Community mitteilen würden, nicht nur diesem Skript-Snippet.
Peterh
-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

Sie müssen das Semikolon an der richtigen Stelle verwenden.

Emaya
quelle
Außerdem muss das ENDam Ende bündig nach links sein, ohne Leerzeichen davor.
Kusalananda