2016-08-09 105 views
0

我有一個類型爲char(10)[]的字段的PG表。Mule:如何將數組參數發送到數據庫更新

我需要使用來自Mule流的值更新表中的記錄。

所以,我做了這樣的事情:

flowVars.test=['aaa', 'bbb',ccc']; 

然後,我想提出一個更新語句是這樣的:

update tab1 set fld1=#[flowVars.test] 

它與錯誤而失敗:

Cannot cast an instance of java.util.ArrayList to type Types.ARRAY 

我的理解是,在這種情況下應該使用SQL數組,但我不知道如何獲得一個insta流中的這樣一個數組以及如何在MEL中使用它。

有人能請指教嗎?

謝謝

回答

0

好的,我發現在MuleSoft DOC一個答案。 從版本3.6開始DB連接器支持自定義類型,並允許定義SQL數組和結構以及自定義用戶類之間的映射。 它記錄在here

+0

研究這需要大約一個月的時間嗎?沒有冒犯的意思,只是驚訝地看到需要多少研究騾子的事情 – mCeviker

0

有許多建議使用Connection#createArrayOf()來源。但我不知道如何在數據庫連接器中使用它。

然而,爲了這個目的,我會做到這一點的解決方案:

  1. 轉換ArrayList的一個字符串。應形成爲:{value1, value2, ...}
  2. 更改數據庫的查詢類型從參數動態
  3. 更新SQL查詢變爲:update tab1 set fld1 = '#[flowVars.test]'。此查詢類型需要額外的單引號。

最後,通過使用下面的配置我可以更新型字符(10)的字段[]

<expression-transformer expression="#[flowVars.test = ['aaa', 'bbb', 'ccc'].toString().replace('[', '{').replace(']', '}')]" doc:name="Expression"/> 
<db:update config-ref="Postgre_Database_Configuration" doc:name="Database"> 
    <db:dynamic-query><![CDATA[update tab1 set fld1 = '#[flowVars.test]']]></db:dynamic-query> 
</db:update> 
相關問題