使用IN OPERATOR的Mule Oracle数据库连接器SQL

时间:2016-05-17 11:57:17

标签: database mule mule-component

我对mule的数据库连接器有问题,我用它来进行选择查询。我有一个字符串的arraylist在参数中给出内部。

Mule Sql Query - passing parameters to the IN operator

上面提到的解决方案不适用于3.7.3 Mule ESB,我已经尝试了很多方法并搜索了它。除了这份文件,我到目前为止还没有明确的方法。

我正在使用以下查询:

从db_table中选择*,其中id为(2,3,4)

在我的例子中,2,3,4位于我的流量变量中,其中包含arraylist。

有什么建议吗?

2 个答案:

答案 0 :(得分:0)

你可以这样做。我使用MySQL作为我的例子,只需将其更改为Oracle。

enter image description here

    <flow name="dbqueryFlow">
        <http:listener config-ref="HTTP_Listener_Configuration" path="/db" doc:name="HTTP"/>
        <set-payload value="#[[1,3,5]]" doc:name="Mock Set of Ids"/>
        <expression-component doc:name="Set IDs to String"><![CDATA[ids = payload.toString().replace("[", "").replace("]", "").replace(", ", ",");
flowVars['ids'] = ids;]]></expression-component>
        <logger message="SID === #[flowVars.ids]" level="INFO" doc:name="Logger"/>
        <db:select config-ref="MySQL_Configuration" doc:name="Database" >
            <db:dynamic-query><![CDATA[SELECT * FROM bridge WHERE id IN (#[flowVars.ids])]]></db:dynamic-query>
        </db:select>
        <logger level="INFO" doc:name="Logger"/>
    </flow>

希望这有帮助

答案 1 :(得分:0)

我再次使用这个答案解决了相关问题:

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 connector的动态查询参数上使用了这个流变量sql,它完美地运行了。

<db:select config-ref="PDP_Configuration" doc:name="Database">
    <db:dynamic-query><![CDATA[#[flowVars.sql]]]></db:dynamic-query>
</db:select>

这不是官方的答案,但我相信Mule开发人员应该找到这种主要问题的官方解决方案。我希望它有所帮助!