2017-06-07 28 views
0

我正在运行多个选择查询,我希望他们一个接一个地运行。 在本例中,我选择了账号,然后在下面的查询中使用这些号码。这些查询是否会一个接一个地连续运行,即只有在前一个查询完成后才运行下一个查询。我是否需要将它们包装在复合源中并将它们包装在事务中?那将是什么样子?骡数据库连接器多个查询

<flow name="PopulateAccount"> 
      <db:select config-ref="dsConfig" doc:name="Get Account ID"> 
      <db:paramterized-query><![CDATA[ 

       SELECT ACC_NUM.... 
      </db:select> 

      <custom-transformer class="com.vf.ListTransformer"> 

      <set-session-variable variableName="messageID" value="#[payload]" 
           doc:name="Set Account IDs"/> 


     <!-- The next query depends on the Account IDS from 
       previous results in the session variable --> 

     <db:select config-ref="dsConfig" doc:name="Get Account Detail"> 
      <db:paramterized-query><![CDATA[ 
       SELECT ACC_NAME,.... 
      </db:select> 
     <custom-transformer class="com.vf.AccountsTransformer"> 

      <!-- More database operations ---> 
    </flow> 

回答

0

将查询连续运行一个其他

肯定后,只要你不采取任何措施并行运行它们,就像例如在移动数据库组件单独的流程并以异步方式调用它。

我需要包起来的复合源

没有,特别是没有,如果你(在你的例子一样)使用的第一个查询的结果在第二个查询

并在交易中包裹它们

为什么?你没有在你的例子中插入/更新任何东西。

会是什么样子?

就像你的例子。我唯一会改变的是如何存储第一个查询的结果。虽然使用set-variable没有什么问题,但我更喜欢使用一个浓缩器将结果存储在变量中,而不是在之后更改有效负载和设置变量。

<flow name="testFlow"> 
    <enricher target="#[flowVars.messageID]" doc:name="Message Enricher"> 
     <db:select config-ref="MySQL_Configuration" doc:name="select ACC_NUM"> 
      <db:parameterized-query><![CDATA[SELECT ACC_NUM ...]]></db:parameterized-query> 
     </db:select> 
    </enricher> 
</flow> 
+0

谢谢你的伴侣,真的很感谢。 – BreenDeen