0

スクリプトで後で使用するために、db2 コマンドからの出力を変数に適用するのを誰かが手伝ってくれることを願っています。

これまでのところ、私は...

db2 "connect to <database> user <username> using <password>"

while read HowMany ;
do
  Counter=$HowMany
  echo $HowMany
done < <(db2 -x "SELECT COUNT(1) FROM SYSCAT.COLUMNS WHERE TABNAME = 'TableA' AND TABSCHEMA='SchemaA' AND GENERATED = 'A'")

$Counterwhile ループの外で参照しようとするとSQL1024N A database connection does not exist. SQLSTATE=08003echo $HowMany

パイプを使用して別の方法を試しましたが、これにより$HowMany正しい値が表示されますが、それはサブシェルであるため、後で失われます。

スクリプトがいつでも中止された場合にファイルが残ってしまうのは嫌なので、一時ファイルを使用せず、可能であればそれらを削除したいと思います。

4

2 に答える 2

0

お気づきのように、1 つのシェルでの DB2 接続はサブシェルでは使用できません。サブシェルを使用できますが、CONNECTそのサブシェルにステートメントを配置する必要があります。

したがって、これは単純な書き直しであり、サブシェルは使用しないでください。

db2 "connect to <database> user <username> using <password>"

db2 -x "SELECT COUNT(1) FROM SYSCAT.COLUMNS WHERE TABNAME = 'TableA' AND TABSCHEMA='SchemaA' AND GENERATED = 'A'" | while read HowMany ; do
    Counter=$HowMany
    echo $HowMany
done
于 2015-02-05T17:35:21.037 に答える