2017-04-06 6 views
0

Mule 3.7.3에서 데이터베이스 커넥터를 처음 사용했습니다. 동적으로 형성된 INSERT 문을 사용하여 대량 데이터를 삽입하려고합니다. 나는 당신이 보통이 접근 방식이라고 부르는 것을 모르지만, 내가하고자하는 것은 여러 경로를 선택하고 각 경로에 INSERT 문을 하드 코딩하는 대신 동적으로 여러 스테이징 테이블에 여러 파일을로드하는 것입니다.흐름 변수에 INSERT 문을 동적으로 삽입하여 대량 데이터 삽입

내 flowVars.insertStatement에는 "INSERT INTO [roomService] ([RoomId], [ServiceId], [DateTime]) VALUES (# [payload.roomId], # [payload.serviceId] payload.dateTime])는 "

나는이 함께했을 때 :이 날을 제공

<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 문자열 (# [payload.roomId], # [payload.serviceId], # [payload.dateTime])을 플로우 변수로 가져온 다음 flowVars에 연결해야한다는 것입니다. .insertStatement. 데이터를 삽입하려는 페이로드 필드를 구체적으로 언급하면 ​​동적이지 않습니다. 이 일에 대해 더 잘 알고 있다면 알려주십시오. –

+0

죄송합니다, 그럼 난 그냥 문제를 이해하지 못한다 : ( – Yevgeniy