首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mule:从子数组引用要插入数据库的值

Mule:从子数组引用要插入数据库的值
EN

Stack Overflow用户
提问于 2017-04-06 22:57:48
回答 2查看 431关注 0票数 0

我的有效载荷是这样的,这是一个ArrayList

代码语言:javascript
复制
  payload :[[a3An00000009Ej6EAE, a3An00000009EjGEAU, a3An00000009EjBEAU], [45000.0, 50000.0, 12000.0]]

我的输入数据中有多个数组。

我可以引用id值,就像#message.payload.id&将其放在insert语句中一样:

代码语言:javascript
复制
 <db:parameterized-query><![CDATA[INSERT INTO HDR_TABLE (ID) VALUES (#[message.payload.id])]]</db:parameterized-query>

如何在代码中引用两个单独的数组?

代码语言:javascript
复制
  <db:bulk-execute config-ref="Oracle_Configuration" doc:name="Database"><![CDATA[

插入xxtw.XXTW_OE_CONTRACT_LINE(CONTRACT_LINE_ID,‘#[有效载荷]’,‘#[有效载荷]’)

代码语言:javascript
复制
                                                                                                           ]]></db:bulk-execute>                                                                                                  
     <!--  <foreach doc:name="For Each" collection="#[flowVars.extendedPrice]">
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-04-07 02:31:04

为了将记录列表插入到数据库中的表中,我们可以在数据库连接器属性的Basic Settings中使用Bulk选项。通过启用此选项,我们不需要遍历列表/数组。

由于批量模式,操作需要Iterable/Iterator作为输入。我们必须确保有效载荷是一个列表。在这种情况下,如果预期的结果是id和lineID的所有值都插入到相同的表中,则为HDR_TABLE。然后,我们必须将它们合并为一个列表,并覆盖有效载荷。

代码语言:javascript
复制
<expression-component doc:name="Expression"><![CDATA[
    payload.lineID.add(payload.id);
    payload = payload.lineID;]]>
</expression-component>

如果只需要将lineID插入到HDR_TABLE中,则直接设置有效负载。

代码语言:javascript
复制
<set-payload value="#[payload.lineID]" doc:name="Set Payload"/>

最后修改查询:

代码语言:javascript
复制
<db:parameterized-query><![CDATA[INSERT INTO HDR_TABLE (ID) VALUES (#[payload])]]</db:parameterized-query>

IMHO,编辑的问题与原来的略有不同。但是,为了插入没有循环的数组,我们仍然使用Bulk Mode选项(Operation= Insert,Query = Parameterized)。然后再执行一个额外的步骤,将有效载荷合并成一个连续n元组的列表。

  1. 有效载荷是一个数组:[[a3An00000009Ej6EAE, a3An00000009EjGEAU, a3An00000009EjBEAU], [45000.0, 50000.0, 12000.0]]。它将被数据库连接器误解,甚至大容量模式被激活。数据库会认为只有两条记录。因为主数组由两个记录/数组组成。
  2. 而预期的有效载荷是一个包含3条记录的列表。因此,我们需要将它们合并成类似于键值对记录的东西。所以会是这样的:[[a3An00000009Ej6EAE, 45000.0], [a3An00000009EjGEAU, 50000.0], [a3An00000009EjBEAU, 12000.0]]
  3. 为了产生预期的有效载荷,然后添加一个额外的转换器,设置有效载荷。使用以下表达式设置其值:#[dw('payload[0] zip payload[1]')]
  4. 最后,细化SQL查询变成:INSERT INTO tableName (col1, col2) VALUES(#[payload[0]], #[payload[1]])
票数 1
EN

Stack Overflow用户

发布于 2017-04-07 02:31:03

可以将payload.lineID用分隔符分隔为',‘,这将产生一个数组。

从该数组中,您实际上可以使用Index获得值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43267042

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档