【问题标题】:INSERT statement not working when using it through a variable in Mule通过 Mule 中的变量使用 INSERT 语句时不起作用
【发布时间】:2023-10-27 16:10:02
【问题描述】:

我的数据库组件有如下配置

<db:insert config-ref="Oracle_Configuration" bulkMode="true" doc:name="Database">
        <db:dynamic-query><![CDATA[#[flowVars.dbquery]]]></db:dynamic-query>
</db:insert>

我已经声明了“dbquery”变量如下

<set-variable variableName="dbquery" value="INSERT INTO WBUSER.EMP VALUES('#[payload.FullName]','#[payload.SerialNumber]')" doc:name="Variable"/>

在运行应用程序时,插入数据库的值为“#[payload.FullName] 和#[payload.SerialNumber]。

但是当我的数据库组件具有以下配置时,FullName 和 SerialNumber 的实际值被插入到数据库中。

<db:insert config-ref="Oracle_Configuration" bulkMode="true" doc:name="Database">
        <db:dynamic-query><![CDATA[INSERT INTO WBUSER.EMP VALUES('#[payload.FullName]','#[payload.SerialNumber]')]]></db:dynamic-query>
</db:insert>

这里 FullName 和 SerialNumber 不是变量。它们是有效负载中列表的列名,如 [{FullName=yo, SerialNumber=129329}, {FullName=he, SerialNumber=129329}]。 谁能告诉我这里的区别。有没有一种方法可以像之前的情况一样只使用变量来实现数据库插入?

【问题讨论】:

    标签: database mule esb


    【解决方案1】:

    这是由于插入数据的方法不同造成的。它适用于 db-insert 内部的配置,因为负载采用 List 的形式并选择了 Bulk Mode 选项。

    要使其适用于第一个配置(在变量中声明 SQL 查询),您必须执行以下步骤:

    1. 利用collection-splitter 迭代每个有效负载值。
    2. 从数据库连接器中取消选择批量模式

    配置应该是:

        <collection-splitter doc:name="Collection Splitter"/>
        <set-variable variableName="dbquery" value="INSERT INTO WBUSER.EMP VALUES('#[payload.FullName]','#[payload.SerialNumber]')" doc:name="Variable"/>
        <db:insert config-ref="MySQL_Configuration" doc:name="Database">
            <db:dynamic-query><![CDATA[#[flowVars.dbquery]]]></db:dynamic-query>
        </db:insert>
    

    【讨论】:

      最近更新 更多