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>
我有一个类似于下面示例的负载
{"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>