2017-04-06 19 views
0

我是Mule 3.7.3中的數據庫連接器的新手。我試圖使用動態形成的INSERT語句來插入批量數據。我不知道你們通常將這種方法稱爲什麼,我打算做的是動態地將多個文件加載到相應的登臺表中,而不是具有多選路由並在每個路由中對INSERT語句進行硬編碼。我的flowVars.insertStatement包含如下值:「INSERT INTO [roomService]([RoomId],[ServiceId],[DateTime])VALUES(#[payload.roomId],#[payload.serviceId],#[ payload.dateTime]) 「將帶有動態構建的INSERT語句的批量數據插入流變量

當我試圖與這些:

<db:insert config-ref="Staging_DB" doc:name="insert-data-into-staging-db" bulkMode="true"> 
    <db:parameterized-query><![CDATA[#[flowVars.insertStatement]]]></db:parameterized-query> 

這給了我」 的查詢類型必須是 '[INSERT,STORE_PROCEDURE_CALL]' 但 'DDL'(java.lang中的一個。 IllegalArgumentException)「

<db:insert config-ref="Staging_DB" doc:name="insert-data-into-staging-db" bulkMode="true"> 
    <db:dynamic-query><![CDATA[#[flowVars.insertStatement]]]></db:dynamic-query> 

這給了我 「批量查詢不能包含一個參數化的SQL查詢(java.lang.IllegalArgumentException異常)」

<db:insert config-ref="Staging_DB" doc:name="insert-data-into-staging-db" bulkMode="true"> 
    <db:dynamic-query><![CDATA[#[flowVars.insertStatement]]]></db:dynamic-query> 

這給了我 「指數:0(java.lang.IndexOutOfBoundsException)」

我需要一些指針如何正確地做到這一點。請指教。

回答

0

我擔心你不會在你的方法中使用批量模式。

你可能定義flowVars.insertStatement這樣的:

<set-variable variableName="insertStatement" value="&quot;INSERT INTO [roomService] ([RoomId],[ServiceId],[DateTime]) VALUES (#[payload.roomId],#[payload.serviceId],#[payload.dateTime])&quot;" doc:name="set insertStatement"/> 

這將使定義變量之後肯定payload.roomId等flowVars不會成爲null,但在同一時間,他們不會被db:insert組件或者更換。

以下配置使用foreach組件,而不是批量模式,但會爲您的工作:

<set-payload doc:name="test data" value="#[[{ &quot;name&quot;: &quot;Chevon&quot; }, { &quot;name&quot;: &quot;Yevgeniy&quot; }]]"/> 
<foreach doc:name="For Each"> 
    <set-variable variableName="sql" value="insert into TEST(name) values ('#[payload.name]')" doc:name="set sql variable"/> 
    <db:insert config-ref="MySQL_Configuration" doc:name="INSERT"> 
     <db:dynamic-query><![CDATA[#[flowVars.sql]]]></db:dynamic-query> 
    </db:insert> 
</foreach> 
+0

@Yevgeniy您好,感謝您抽出寶貴的時間來作出迴應。問題是我必須從屬性文件中將VALUES字符串(VALUES(#[payload.roomId],#[payload.serviceId],#[payload.dateTime]))獲取到流變量中,然後將其連接到flowVars .insertStatement。如果我特別提到要插入數據的有效負載字段,那麼它不是動態的。讓我知道你是否有更好的想法。 –

+0

對不起,那我只是不明白問題:( – Yevgeniy