我的传入Payload是这样的,这是一个ArrayList
payload :[[a3An00000009Ej6EAE, a3An00000009EjGEAU, a3An00000009EjBEAU], [45000.0, 50000.0, 12000.0]]
我的传入数据中有多个数组。
我可以将id值引用为#[message.payload.id]&把它放在插入语句中:
<db:parameterized-query><![CDATA[INSERT INTO HDR_TABLE (ID) VALUES (#[message.payload.id])]]</db:parameterized-query>
如何在代码中引用两个单独的数组?
<db:bulk-execute config-ref="Oracle_Configuration" doc:name="Database"><![CDATA[
INSERT INTO xxtw.XXTW_OE_CONTRACT_LINE(CONTRACT_LINE_ID,ATTRIBUTE1)VALUES(xxtw.XXTW_OE_CONTRACT_LINE_SEQ.NEXTVAL,&#39;#[payload [0] [0]]&#39;,&#39;#[payload [0] [1]]&#39)
]]></db:bulk-execute>
<!-- <foreach doc:name="For Each" collection="#[flowVars.extendedPrice]">
答案 0 :(得分:1)
为了将记录列表插入数据库中的表格,我们可以使用数据库连接器属性中基本设置内的批量模式选项。通过启用此选项,我们不需要遍历列表/数组。
由于批量模式操作需要Iterable / Iterator作为输入。我们必须确保Payload是一个List。在这种情况下,如果预期结果是 id 的所有值,并且 lineID 被插入到同一个表HDR_TABLE中。然后,我们必须将它们合并为List并覆盖Payload。
<expression-component doc:name="Expression"><![CDATA[
payload.lineID.add(payload.id);
payload = payload.lineID;]]>
</expression-component>
如果只需要将 lineID 插入HDR_TABLE,则直接设置有效负载。
<set-payload value="#[payload.lineID]" doc:name="Set Payload"/>
最后修改查询:
<db:parameterized-query><![CDATA[INSERT INTO HDR_TABLE (ID) VALUES (#[payload])]]</db:parameterized-query>
恕我直言,编辑过的问题与原版问题略有不同。但是,为了在不循环的情况下插入数组,我们仍然使用批量模式选项(Operation = Insert,Query Type = Parameterized)。然后再添加一个步骤将有效负载合并为一个连续的n元组列表。
[[a3An00000009Ej6EAE, a3An00000009EjGEAU, a3An00000009EjBEAU], [45000.0, 50000.0, 12000.0]]
。它将被数据库连接器误解,即使激活批量模式也是如此。 数据库会认为只有两条记录。由于主阵列由两个记录/数组组成。[[a3An00000009Ej6EAE, 45000.0], [a3An00000009EjGEAU, 50000.0], [a3An00000009EjBEAU, 12000.0]]
#[dw('payload[0] zip payload[1]')]
INSERT INTO tableName (col1, col2) VALUES(#[payload[0]], #[payload[1]])
答案 1 :(得分:0)
您可以将payload.lineID与分隔符拆分为','生成数组。
从该数组中,您可以使用Index实际获取值。