シェルスクリプト:SQLクエリ出力をファイルにリダイレクトする

シェルスクリプト:SQLクエリ出力をファイルにリダイレクトする

シェルスクリプトで以下のように書きました。

sqlq(){
result=`sqlplus -S sss/eee@sid < $1|grep -v '^$'`
echo $result
}

echo "select * from emp" > q.sql
sqlq q.sql

出力をファイルに送信する必要があります。以下のようにq.sqlでスプールしようとしましたが、成功しませんでした。

echo "SPOOL /tmp/test.txt; select * from emp';SPOOL off" > q.sql

ベストアンサー1

あなたのコード:

sqlq(){
result=`sqlplus -S sss/eee@sid < $1|grep -v '^$'`
echo $result
}

echo "select * from emp" > q.sql
sqlq q.sql

echo関数の合計変数はsqlq必要ありません。

sqlq () {
  sqlplus -S "sss/eee@sid" < "$1" | grep -v '^$'
}

これは関数の出力を標準出力に送ります(前と同様)。

関数を呼び出すと、その出力をファイルにリダイレクトできます。

cat >query.sql <<END_SQL
SELECT * FROM emp;
END_SQL

sqlq query.sql >result.out

私が使う理由ここのドキュメント利点は、複数行のSQLクエリを非常に簡単に生成できることです。

cat >query.sql <<END_SQL
SELECT data.*
FROM data
  JOIN attributes ON (data.attr_id = attributes.attr_id)
WHERE attributes.name = "Example";
END_SQL

...例えば。

おすすめ記事