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.


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


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

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.


Außerdem muss das ENDam Ende bündig nach links sein, ohne Leerzeichen davor.
Kusalananda
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.