0

私はIBMWebsphereMessage Broker v6.0に取り組んでおり、ESQLでメッセージ・フローを作成しています。パススルーを使用して、データベースでselectクエリを実行しています。

ここで問題となるのは、passthruが'を使用してパラメータ文字列を開始および終了することです。また、SQLでは'を使用して定数を示します。WHERET1.col1='Y'のようになります。したがって、passthruパラメーターで'を使用している場合、それは文字列の終わりと見なされます。

ESQLコードは次のとおりです。

SET result1 = passthru ('select CASE WHEN T2.X_FLG = 'Y' AND (SELECT D2.RGN FROM V1.X AS D2
WHERE D2.DLR = V.DLR AND (D2.RGN = '500' OR D2.RGN = '600')) FROM V1
<left join all the tabels>');

ここで問題となるのは、パススルーパラメータ文字列がYの直前の最初の'で終了することです。これは、データベース選択クエリへのパラメータです。ESQLコンパイラは、構文エラーを示すコンパイラエラーを表示します。

パススルーする文字列の終わりとしてではなく、文字として認識されるように、'の前に追加される文字がありますか?\'または/'のようなもの?私はこれをすべて試しましたが、何も機能しないようです。

4

4 に答える 4

1

理解した!SQLステートメントに定数値を渡すことを可能にし、SQLクエリの'が完了した後に書き込まれる別の句があります(私が言うべきです)。定数値が必要な場所は?そしてそれは挿入のための場所をマークします。挿入は、「values」タグに定数値を配置する順序で行われます。したがって、上記のパススルークエリは次のように記述できます。

SET result1 = passthru ('select CASE WHEN T2.X_FLG = ? AND (SELECT D2.RGN FROM V1.X AS D2
WHERE D2.DLR = V.DLR AND (D2.RGN = ? OR D2.RGN = ?)) FROM V1
<left join all the tables>' to Database.{datasource_name} values('Y','500','600');

覚えておいてください?角かっこで囲まないでください。

于 2012-05-08T19:29:44.020 に答える
0

このように設定してみてください

passthru ('select CASE WHEN T2.X_FLG = '||VariableName||'

値Yを持つVariableName

于 2012-04-18T18:49:34.220 に答える
0
SET result1 = passthru ('select CASE WHEN T2.X_FLG = ''Y'' AND (SELECT D2.RGN FROM V1.X AS D2 WHERE D2.DLR = V.DLR AND (D2.RGN = ''500'' OR D2.RGN = ''600'')) FROM V1 <left join all the tabels>');

つまり、二重一重引用符を使用する(''string value'')と、クエリの終了ではなく値として扱われます。これがうまくいくことを願っています。

また、これは一重引用符を2回引用しないように注意してください。

于 2013-07-20T08:16:20.373 に答える
0

あなたは次のように書くことができます

passthru('select CASE WHEN T2.X_FLG = ?', 'Y')

?クエリの後に、put値とコンマ区切り値をそれぞれsimplayします。

于 2017-02-14T07:25:26.723 に答える