Mule3 在查询中将数据插入到 2 个表中

Mule3 insert data into 2 tables in a query

我有一个类似于下面示例的负载

{"timezone": null,
  "recurrence": null,
  "event_id": "55bfe76n3",
  "attendeesEmail": [
    {
      "email": "abc@xyz.com",
      "responseStatus": "needsAction"
    },
    {
      "email": "efg@xyz.com",
      "responseStatus": "needsAction"
    }]
}

我想将负载插入两个 tables,table A 的值在 attendeesEmail 对象中,table B 具有剩余的键值。我希望有一个数据库连接器来执行此操作。

我尝试过的事情:

使用批量操作插入但无法在 1 个 dbConnector 中的单个查询中执行多个插入

BEGIN;
INSERT INTO A (event_id) values ('55bfe76n3');
INSERT INTO B (email) values ('abc@xyz.com');
COMMIT;

这会抛出一条错误消息:“查询类型必须是‘[INSERT, STORE_PROCEDURE_CALL]”之一,但为 'DDL' (java.lang.IllegalArgumentException)."

大容量插入操作不应该这样使用。您应该使用 2 non-bulk <db:insert> 次操作,每个 table 一次。不要使用 BEGIN 和 COMMIT,它们应该由 Mule 事务特性控制。每个操作都应该是单个插入查询。

示例:

<flow name="insertFlow">
    <db:insert config-ref="Mysql_Database_Configuration" doc:name="Database">
        <db:parameterized-query><![CDATA[INSERT INTO A (event_id) values ('55bfe76n3')]]></db:parameterized-query>
    </db:insert>
    <db:insert config-ref="Mysql_Database_Configuration" doc:name="Database">
        <db:parameterized-query><![CDATA[INSERT INTO B (email) values ('abc@xyz.com')]]></db:parameterized-query>
    </db:insert>
</flow>    

Mulesoft 允许一次执行一个操作。不能同时执行两个插入操作。

批量操作接受批量输入参数,但只允许插入、更新或删除一项操作。

但是,如果您想合并两个插入操作,则可以使用存储过程。您可以在存储过程中传递动态输入参数,这将解决您的问题

  <db:stored-procedure config-ref="dbConfig">
    <db:sql>{ call updateEmployee('EmailID', :emailID) }</db:sql>
    <db:input-parameters>
        #[{'emailID' : payload}]
    </db:input-parameters>
</db:stored-procedure>