2017-04-06 47 views
0

我即將到來的淨荷是這樣,這是一個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, '#[有效載荷[0] [0]]', '#[有效載荷[0] [1]]' )

                          ]]></db:bulk-execute>                         
    <!-- <foreach doc:name="For Each" collection="#[flowVars.extendedPrice]"> 

回答

0

爲了插入記錄列表到數據庫中的表,我們可以利用數據庫中連接器的屬性基本設置批量方式選項。通過啓用此選項,我們不需要遍歷列表/數組。

由於批量模式操作需要Iterable/Iterator作爲輸入。我們必須確保有效負載是一個列表。在這種情況下,如果預期結果是id的所有值,則將行ID插入到同一個表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> 

恕我直言,編輯的問題是,與原來的略有不同。但是爲了插入沒有循環的數組,我們仍然使用Bulk Mode選項(Operation = Insert,Query Type = 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]])
+0

你好Sulthony,進一步修正我的代碼。我的有效載荷是一個數組數組,我需要從每個&插入一個,換句話說,我想插入#payload [0],[0]。如何實現這一點我已經更新了上面的代碼。期待您的輸入 – insaneyogi

+0

您好@insaneyogi,我已經更新了我的答案。 –

+0

HI Sulthony,非常感謝! – insaneyogi

0

您可以將帶有分隔符的payload.lineID拆分爲生成數組的','。

從該數組中,您實際上可以通過使用索引獲取值。