2011-02-01 8 views
1

bashを使用してoracle sqlplusクエリをループする必要があります。bashスクリプトのループsqlクエリ

私のシナリオはこのようなものです。私はテキストファイルに一連の名前があり、sqlplusクエリを使ってその名前の詳細を調べる必要があります。

textfile.txt内容:

john 
robert 
samuel 
chris 

bashスクリプト

#!/bin/bash 

while read line 
do 
/opt/oracle/bin/sqlplus -s [email protected]/password @query.sql $line 
done < /tmp/textfile.txt 

SQLクエリ:query.sql

set verify off 
set heading off 
select customerid from customers where customername like '%&1%'; 
exit 

問題は、私は、スクリプトを実行したとき、私は

のようなエラーが出ています

SP2-0734:未知のコマンドの開始 "robert ..." - 残りの行は無視されます。

誰かがこれを解決する方法を教えてもらえますか?

+2

にそれを送信する前に、SQLコマンドにそれを配置します通常は1つの大きなクエリを実行し、SQLのループを避ける方が良い –

+2

確かに。 OPがテキストファイルに保存されたストアドプロシージャを再発明しようとしているようです。 – lll

答えて

2

次のように私はこのすべての時間を行う方法は、次のとおりです。

#!/bin/bash 

cat textfile.txt |while read Name 
do 
sqlplus -s userid/[email protected]_name > output.log <<EOF 
set verify off 
set heading off 
select customerid from customers where customername like '%${Name}%' 
/
exit 
EOF 

バッシュが自動魔法の行ごとに$ {name}を拡張し、sqlplusを

+0

素晴らしい!できます!ありがとうございました! –

+0

あなたのために働いたうれしい。 –

1

set define onがありますか?ワイルドカードは&ですか?あなたはglogin.sqlを知ることができます。

はい、nクエリを渡すためにn接続を確立することは、おそらく良い解決策ではありません。おそらく、あなたが開発する方が速いかもしれません。あなたはそのことを一度は行いますが、そうでなければ、手順を作ることを考えるべきです。