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.


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


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

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.


Juga, ENDpada akhirnya harus rata ke kiri, tanpa spasi di depannya.
Kusalananda
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.