SQLクエリの出力を変数に割り当てる


10

Oracleデータベースに接続してクエリを実行し、出力を変数に割り当てていますが、変数の値をエコーすると、正しく出力されません。

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

クエリは、データベースで実行されると正しい結果を返します。しかし、「カウント」変数の値が正しくありません。


1
インデントが元のコードと一致しているかどうかを確認してください。形式を修正した後です。(一致する場合、それは誤りです。ヒアドキュメントの終了区切り文字をそのようにインデントすることはできません。)
manatwork

通常モードでは何が表示され、割り当て時のcountの値は何ですか?
ott-- 2013

回答:


13

終了するhere-doc単語は、行の唯一の文字でなければなりません。インデントは許可されません。また、$()バックティックの代わりに使用します-ネスト可能です。

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
<<-END表記でタブを使用することもできます。スペースではなく、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
どうして?このスクリプトスニペットだけでなく、コミュニティとアイデアを共有した方がいいと思います。
peterh-モニカを2015年

-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

セミコロンを正しい場所で使用する必要があります。


また、END最後のは左に揃え、その前に空白を入れないようにする必要があります。
Kusalananda
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.