2016-08-09 25 views
0

Ich habe eine PG-Tabelle mit einem Feld vom Typ char (10) [].Mule: wie Array-Parameter zu DB Update

Ich muss einen Datensatz in der Tabelle mit Werten aus einem Mule-Fluss aktualisieren.

Also, ich so etwas wie dies tat:

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

Dann Ich versuche, eine Update-Anweisung wie folgt einreichen:

update tab1 set fld1=#[flowVars.test] 

es mit dem Fehler Fehler:

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

Mein Verständnis ist, dass SQL-Array in diesem Szenario verwendet werden sollte, aber ich kann nicht herausfinden, wie man ein insta nce eines solchen Arrays in einem Flow und wie man damit in MEL arbeitet.

Kann jemand bitte beraten?

Danke,

Antwort

0

Ok, habe ich eine Antwort in MuleSoft doc gefunden. Ab Version 3.6 unterstützt der DB-Connector benutzerdefinierte Typen und ermöglicht die Definition der Zuordnung zwischen SQL-Arrays und -Strukturen und benutzerdefinierten Benutzerklassen. Es ist dokumentiert here.

+0

Hat es etwa einen Monat gedauert, um das zu recherchieren? Nichts für ungut, nur überrascht zu sehen, wie viel es braucht, um Dinge in Maultier zu erforschen – mCeviker

0

Es gibt viele Quellen, die die Connection#createArrayOf() verwenden vorschlagen. Aber ich weiß nicht, wie man es im Database Connector verwendet.

jedoch zu diesem Zweck werde ich diese Lösung tun:

  1. die Arraylist in einen String konvertieren. die Datenbankabfrage Typ von Parameterized in Dynamische
  2. Aktualisieren Sie die SQL-Abfrage werden {value1, value2, ...}
  3. ändern: update tab1 set fld1 = '#[flowVars.test]' Es sollte so gebildet werden. Das zusätzliche einfache Anführungszeichen ist für diesen Abfragetyp erforderlich.

Schließlich wird durch die folgende Konfiguration verwendet, kann ich Feld Zeichentyp aktualisieren (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>