我有一个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中使用它。
有人可以提供建议吗?
谢谢,
答案 0 :(得分:0)
有许多消息来源建议使用Connection#createArrayOf()
。但我不知道如何在数据库连接器中使用它。
但是,为此我会做这个解决方案:
{value1, value2, ...}
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>
答案 1 :(得分:0)
好的,我在MuleSoft doc中找到了答案。 从版本3.6开始,DB连接器支持自定义类型,并允许定义SQL数组和结构与自定义用户类之间的映射。 它记录在案here。