2017-09-19 23 views
0

特殊文字を含むオブジェクトのSQLクエリーからの出力をシェルスクリプトの変数に割り当てようとしています。データベース上で直接実行シェルスクリプトのSQL出力を変数にエスケープする

:私はスクリプトでこれを含む場合

db2 -x 'select count(*) from <SCHEMA>."/BIC/TEST"' 

     11000 

は、しかし、私は私がSQLに渡された変数を使用していて、二重引用符を使用する必要があります。単一引用符で

Output=$(db2 -x 'select count(*) from ${_SCHEMA}."/BIC/TEST"') 

echo -e "$Output" 

結果を使用して:

私は私がヒット、二重引用符を使用
SQL20521N Error occurred processing a conditional compilation directive near 
"_". Reason code="7". SQLSTATE=428HV 

:予期しないトークンを

SQL0104Nを " '/ BIC/TEST'" ount」次が見出されました( *)

は、二重引用符の別のセットを使用して二重引用符をエスケープしようとしました:

D "/ BIC/TEST" "'

これはスクリプトではうまくいかないようです。引用符で囲むための特別な文字/要件がないテーブルで動作します。

何か助けていただければ幸いです。

+0

編集は、あなたが(bashのは、kshのなど)私はSH&bashの – mao

+0

、これに感謝を使用しているシェル。魅力的な仕事をしました。 – dgodson

答えて

0

以下のコードは私にとってはうまく動作しますが、エスケープされた引用符に気づくでしょう。失敗した場合は、DB2バージョンとDB2サーバー・オペレーティング・システム・プラットフォームの詳細を提供する必要があります。あなたの質問を追加する

#!/bin/ksh 

db2 connect to sample 
(($? > 0)) && print "Failed to connect to database" && exit 1 

db2 -o- "drop table \"/bin/test\" " 

db2 -v "create table \"/bin/test\"(a integer)" 
(($? > 0)) && print "Create table failed" && exit 1 

db2 -v "insert into \"/bin/test\"(a) values(1),(2),(3),(4)" 
(($? > 0)) && print "insert rows failed" && exit 1 

db2 -v describe table \"/bin/test\" 

typeset -i count_rows=$(db2 -x "select count(*) from \"/bin/test\"") 
(($? > 0)) && print "query count rows failed" && exit 1 

print "\nRow count is: ${count_rows}\n" 

db2 -o- connect reset 
+0

パーフェクトにしようとしている – dgodson

関連する問題