Mule:如何将Array参数发送到DB Update

时间:2016-08-09 05:39:08

标签: mule

我有一个PG表,其字段类型为char(10)[]。

我需要使用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数组,但是我不能弄清楚如何在流中获取这样一个数组的实例以及如何在MEL中使用它。

有人可以提供建议吗?

谢谢,

2 个答案:

答案 0 :(得分:0)

有许多消息来源建议使用Connection#createArrayOf()。但我不知道如何在数据库连接器中使用它。

但是,为此我会做这个解决方案:

  1. 将ArrayList转换为String。它应该形成为:{value1, value2, ...}
  2. 将数据库查询类型从参数化更改为动态
  3. 更新SQL查询成为:update tab1 set fld1 = '#[flowVars.test]'。此查询类型需要额外的单引号。
  4. 最后,通过使用以下配置,我可以更新字符(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>
    

答案 1 :(得分:0)

好的,我在MuleSoft doc中找到了答案。 从版本3.6开始,DB连接器支持自定义类型,并允许定义SQL数组和结构与自定义用户类之间的映射。 它记录在案here