Menetapkan output dari query SQL ke variabel

10

Saya terhubung ke database oracle dan menembakkan kueri dan menetapkan output ke variabel Tapi ketika saya menggemakan nilai variabel itu tidak bisa dicetak dengan benar.

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

Permintaan mengembalikan hasil yang benar ketika dipecat pada basis data. Tetapi variabel "menghitung" memiliki nilai yang salah.

suni
sumber
1
periksa apakah indentasi cocok dengan kode asli Anda, sekarang setelah saya memperbaiki pemformatan. (Jika cocok, maka itu salah. Anda tidak dapat membuat indentasi pembatas penutupan di sini-dokumen seperti itu.)
manatwork
Apa yang ditampilkan dalam mode normal, dan berapa nilai hitungan saat menetapkan?
ott--

Jawaban:

13

Kata terminasi di sini-doc harus menjadi satu-satunya karakter di telepon: indentasi tidak diizinkan. Selain itu, gunakan $()alih-alih backticks - mereka dapat bersarang.

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
sumber
2
Anda juga dapat menggunakan tab dengan <<-ENDnotasi. Bukan spasi, 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
sumber
1
Mengapa? Saya pikir akan lebih baik jika Anda membagikan ide-ide Anda dengan komunitas juga, tidak hanya potongan skrip ini.
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

Anda harus menggunakan titik koma di tempat yang tepat.

Emaya
sumber
Juga, ENDpada akhirnya harus rata ke kiri, tanpa spasi di depannya.
Kusalananda