我正在使用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编译器给我编译错误说它的语法错误。
是否有一些字符要在'之前附加'以便将其识别为字符'而不是作为字符串的结尾?像\'或/'之类的东西?我尝试了所有这些,但似乎没有任何效果。
答案 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')
您分别在查询后设置?
和逗号分隔值。