2017-04-06 32 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