WMB ESQL将常量传递给passthru

时间:2012-04-03 20:05:57

标签: ibm-integration-bus extended-sql

我正在使用IBM Websphere Message Broker v6.0并在ESQL中编写消息流。我正在使用passthru来激发数据库上的选择查询。

现在问题是passthru使用'来开始和结束它的参数字符串。我们使用'在SQL中表示常量 - 类似于WHERE T1.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>');

现在问题是passthru参数字符串在第一个'就在Y之前 - 数据库选择查询的参数结束。 ESQL编译器给我编译错误说它的语法错误。

是否有一些字符要在'之前附加'以便将其识别为字符'而不是作为字符串的结尾?像\'或/'之类的东西?我尝试了所有这些,但似乎没有任何效果。

4 个答案:

答案 0 :(得分:1)

想出来!还有另一个子句(我应该说)允许我们将常量值传递给SQL语句,并在SQL查询完成后写入。我们需要恒定值的地方应该有哪些?它标志着插入的地方。插入采用我们将常量值放在“值”标记中的顺序。因此,上述passthru查询可以写成:

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');

记住,?不应该括在括号内。

答案 1 :(得分:0)

尝试以这种方式设置

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

具有值Y

的VariableName

答案 2 :(得分: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'')这将视为值而不是查询的终止。希望这会奏效。

请注意,这不是双引号的双引号。

答案 3 :(得分:0)

您可以写为

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

您分别在查询后设置?和逗号分隔值。