如何使用新的数据库端点从Mule 3.5调用存储过程

时间:2014-06-09 15:41:33

标签: stored-procedures jdbc mule mule-studio

我正在使用存储过程测试Mule的Mule 3.5的新数据库连接器...(参考: - http://www.mulesoft.org/documentation/display/current/Database+Connector)..我有一个以下存储过程: -

ALTER PROCEDURE [dbo].[sp_retrieveData]
 @Id  int
AS
Select * from getData Where ID = @Id

在Mule的旧JDBC连接器中工作正常......我曾经使用以下语法从JDBC端点调用存储过程: - <jdbc-ee:query key="RetriveQuery" value="CALL sp_retrieveData(${Id})"/>哪个工作正常......但是现在问题是在Mule 3.5新数据库端点我无法调用相同的存储过程...我的Mule配置是: -

<db:stored-procedure config-ref="Generic_Database_Configuration" doc:name="Database">
   <db:parameterized-query><![CDATA[CALL sp_retrieveData(58)]]></db:parameterized-query>
   <db:in-param name="Id" type="INTEGER" value="58"/>
  </db:stored-procedure>

所以,我的问题是如何用新的DB端点调用存储过程...有没人试过????请帮忙......

更新: - 我得到以下例外: -

Exception stack is:
1. The index 1 is out of range. (com.microsoft.sqlserver.jdbc.SQLServerException)
  com.microsoft.sqlserver.jdbc.SQLServerException:170 (null)
2. The index 1 is out of range. (com.microsoft.sqlserver.jdbc.SQLServerException). Message payload is of type: String (org.mule.api.MessagingException)
  org.mule.module.db.internal.processor.AbstractDbMessageProcessor:81 (http://www.mulesoft.org/docs/site/current3/apidocs/org/mule/api/MessagingException.html)
--------------------------------------------------------------------------------
Root Exception stack trace:
com.microsoft.sqlserver.jdbc.SQLServerException: The index 1 is out of range.
    at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:170)
    at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.setterGetParam(SQLServerPreparedStatement.java:698)
    at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.setObject(SQLServerPreparedStatement.java:928)
    + 3 more (set debug level logging or '-Dmule.verbose.exceptions=true' for everything)
********************************************************************************

2 个答案:

答案 0 :(得分:14)

IMO最好的文档是它的测试。 DB模块的存储过程测试位于:https://github.com/mulesoft/mule/tree/mule-3.5.0/modules/db/src/test/resources/integration/storedprocedure

基于这些,以下内容应该有效:

<db:stored-procedure config-ref="Generic_Database_Configuration">
  <db:parameterized-query>{ call sp_retrieveData(:Id) }</db:parameterized-query>
  <db:in-param name="Id" value="58" />
</db:stored-procedure>

(我还没有测试过它)

答案 1 :(得分:2)

示例存储过程调用:

<db:stored-procedure config-ref="Oracle_Configuration1" doc:name="Database">
    <db:parameterized-query><![CDATA[
    {
      call apps.create_sales_Order(:p_header_rec_oper, :P_order_number, :P_ordered_date, :P_line_id, :p_flow_Status_code, :P_return_status)
    }
    ]]>
    </db:parameterized-query>
    <db:in-param name="p_header_rec_oper" value="CREATE"/>
    <db:out-param name="P_order_number" type="INTEGER"/>
    <db:out-param name="P_ordered_date" type="DATE"/>
    <db:out-param name="P_line_id" type="VARCHAR"/>
    <db:out-param name="p_flow_Status_code" type="VARCHAR"/>
    <db:out-param name="P_return_status" type="VARCHAR"/>
</db:stored-procedure>