0

出力に静的列を含むクエリを実行しようとしています。selectステートメントは、CLPを介して実行すると機能しますが、シェルスクリプト内で実行すると機能しません。

su - myid -c 'db2 connect to mydb;db2 -x -v "select COL1,'','',COL2,'','',COL3L from MYTABLE fetch first 10 rows only"; db2 connect reset;'

これを実行すると、出力エラーは次のようになります。

SQL0104N  An unexpected token "," was found following "select COL1,".
Expected tokens may include:  "<select_sublist>".  SQLSTATE=42601

SQL1024N  A database connection does not exist.  SQLSTATE=08003

selectステートメントを変数に入れてステートメント内に挿入しようとしましたが、それでも同じエラーです。どんな助けでも大歓迎です。-どうも

4

1 に答える 1

2

次のようなバックラッシュのように、一重引用符をエスケープする必要があります。

su - myid -c 'db2 connect to mydb;db2 -x -v "select COL1,\'\',\'\',COL2,\'\',\'\',COL3L from MYTABLE fetch first 10 rows only"; db2 connect reset;'

注意してください、私はそれをテストしませんでした...今手元にシェルはありません。

アップデート:

最後に、DB2インスタンスを手に入れました。少しテストした後、動作しました。以前の構文に誤りがあったことが判明しました。一重引用符を引用する適切な方法は、(この場合)'\''のようになります。

su - myid -c 'db2 connect to mydb;db2 -x -v "select COL1,'\'','\'',COL2,'\'','\'',COL3L  from MYTABLE fetch first 10 rows only"; db2 connect reset;'

これは、db2クエリ(\')で一重引用符のエスケープを提供するために、コマンド全体を囲む一重引用符を閉じ(')してから、コマンド引用符(')を再開するために再度開く必要があるためです。見た目は奇妙ですが、機能します。

これは私がそれをテストするために使用したコマンドです:

bash -c 'db2 connect to mydb;db2 -x -v "select 1,'\'','\'',2,'\'','\'',3  from SYSIBM.SYSDUMMY1 fetch first 10 rows only"; db2 connect reset;'
于 2012-12-03T21:11:20.150 に答える