Bir SQL sorgusunun çıktısını değişkene atama


10

Oracle veritabanına bağlanmak ve bir sorgu ateş ve değişken değişkene atama Ama değişkenin değerini yankı zaman doğru yazdırılmaz.

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

Veritabanında tetiklendiğinde sorgu doğru sonucu döndürür. Ancak "count" değişkeninin değeri yanlış.


1
biçimlendirmeyi düzelttikten sonra lütfen girintinin orijinal kodunuzla eşleşip eşleşmediğini kontrol edin. (Eğer eşleşirse, o zaman yanlıştır. Buradaki belgelerin kapanış sınırlayıcısını böyle girintilemezsiniz.)
manatwork

Normal modda ne gösterilir ve atama sırasındaki sayım değeri nedir?
ott--

Yanıtlar:


13

Burada sona eren doc-word kelimesi satırdaki tek karakter olmalıdır: girintiye izin verilmez. Ayrıca, $()ters çentikler yerine kullanın - bunlar değiştirilebilir.

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
Sekmeleri <<-ENDgösterimle de kullanabilirsiniz . Boşluk değil, 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
Neden? Düşüncelerinizi sadece bu kod pasajıyla değil, toplulukla da paylaşmanızın daha iyi olacağını düşünüyorum.
peterh - Monica'yı

-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

Noktalı virgül doğru yerde kullanılmalıdır.


Ayrıca, ENDsonunda, önünde boşluk olmadan, sola aynı hizada olması gerekir.
Kusalananda
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.