Przypisywanie danych wyjściowych zapytania SQL do zmiennej

10

Łączę się z bazą danych Oracle, odpalam zapytanie i przypisuję dane wyjściowe do zmiennej. Ale kiedy echo wartości zmiennej nie jest drukowane poprawnie.

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

Zapytanie zwraca poprawny wynik po uruchomieniu w bazie danych. Ale zmienna „count” ma niepoprawną wartość.

suni
źródło
1
sprawdź, czy wcięcie pasuje do oryginalnego kodu, teraz po tym, jak naprawiłem formatowanie. (Jeśli pasuje, to jest źle. Nie można tak
wciskać
Co jest wyświetlane w trybie normalnym i jaka jest wartość count podczas przypisywania?
ott--

Odpowiedzi:

13

Końcowe słowo tutaj-doc musi być jedynymi znakami w linii: niedozwolone jest wcięcie. Użyj także $()zamiast backticks - można je zagnieżdżać.

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
źródło
2
Z <<-ENDnotacją możesz także korzystać z kart . Nie spacje, 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
źródło
1
Dlaczego? Myślę, że byłoby lepiej, gdybyś podzielił się swoimi pomysłami ze społecznością, nie tylko z tym fragmentem skryptu.
peterh - Przywróć Monikę
-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

Musisz użyć średnika we właściwym miejscu.

Emaya
źródło
Ponadto ENDkoniec musi znajdować się równo z lewej strony, bez białych znaków przed nim.
Kusalananda