我再次使用这个答案解决了相关的问题:
Mule Sql Query - passing parameters to the IN operator
在这里,在这个Java块,我已经建造我的查询并将其放到名为sql
的流变量中:
public Object onCall(MuleEventContext eventContext) throws Exception {
// TODO Auto-generated method stub
ArrayList<String> vib_list = eventContext.getMessage().getInvocationProperty("vibs");
String locale = eventContext.getMessage().getInvocationProperty("lang_locale").toString();
StringBuilder query = new StringBuilder();
String queryBase = "select distinct(matnr) from cated_prodrelease where matnr in(";
query.append(queryBase);
int numIndices = ((ArrayList<Integer>)eventContext.getMessage().getInvocationProperty("vibs")).size();
ArrayList<String> indices = new ArrayList<String>();
for(int i=0; i<numIndices; i++) {
indices.add("'"+ vib_list.get(i) + "'");
}
query.append(StringUtils.join(indices, ", "));
query.append(") " + "AND locale = '" + locale + "' " + "AND release_type = 'PI_RELEASE'");
String finalQuery = query.toString();
eventContext.getMessage().setInvocationProperty("sql", finalQuery);
return eventContext.getMessage();
}
然后,我已经直接在db连接器的动态查询参数上使用这个流量变量sql,它完美的工作。
<db:select config-ref="PDP_Configuration" doc:name="Database">
<db:dynamic-query><![CDATA[#[flowVars.sql]]]></db:dynamic-query>
</db:select>
这不是一个官方的答案,但我相信,骡开发人员应该找到这样的重大问题正式解决方案。我希望它有帮助!
其实我正在使用字符串列表,我刚才给我的问题整数的例子。但是,我在数据库中搜索的数据类型是VARCHAR,所以这不起作用,但它当然适用于数字数据类型。谢谢你的回答。 – Hayra