0

我有一个示例流程,它通过在 SqlServer 2008R2 express 实例上调用存储过程来“选择”记录。

该流程在 Mule Studio 中按预期工作,但当部署到 Mule 独立版 3.4.0 时,调用失败并出现错误

为更新生成了一个结果集。(SQL 代码:0,SQL 状态:+ null)

使用的驱动是微软的sqljdbc4.0

有谁知道如何解决这个问题?

谢谢

<mule xmlns:quartz="http://www.mulesoft.org/schema/mule/quartz" xmlns:jdbc="http://www.mulesoft.org/schema/mule/jdbc" xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation" xmlns:spring="http://www.springframework.org/schema/beans" version="CE-3.4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd
http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/quartz http://www.mulesoft.org/schema/mule/quartz/current/mule-quartz.xsd
http://www.mulesoft.org/schema/mule/jdbc http://www.mulesoft.org/schema/mule/jdbc/current/mule-jdbc.xsd">
    <jdbc:mssql-data-source name="MS_SQL_Data_Source" user="test" password="test" url="jdbc:sqlserver://xxx;databaseName=test" transactionIsolation="UNSPECIFIED" doc:name="MS SQL Data Source"/>
    <jdbc:connector name="JDBC"  validateConnections="true" queryTimeout="-1" pollingFrequency="0" doc:name="JDBC" transactionPerMessage="false" dataSource-ref="MS_SQL_Data_Source"/>
    <flow name="DBTestFlow1" doc:name="DBTestFlow1">
        <quartz:inbound-endpoint jobName="SQL-Purge" repeatInterval="10000" responseTimeout="10000" doc:name="Quartz">
            <quartz:event-generator-job/>
        </quartz:inbound-endpoint>
        <logger message="Starting test" level="INFO" doc:name="Logger"/>
        <jdbc:outbound-endpoint exchange-pattern="request-response" queryKey="IsOOh" queryTimeout="-1" connector-ref="JDBC" doc:name="Database">
            <jdbc:query key="IsOOh" value="CALL IsOOH(#[function:now],#[null])"/>
        </jdbc:outbound-endpoint>
        <logger message="Query Result = #[payload]" level="INFO" doc:name="Logger"/>
    </flow>
</mule>
4

2 回答 2

1

看起来您正在使用 CE JDBC 传输。如果这是正确的,那么这就是你的问题。

CE 版本无法处理对存储过程的调用中的结果集。请参阅 JDBC 传输文档 [1] 中的功能表。

它在 MuleStudio 中工作的原因是由于某种原因,即使选择了 CE 运行时,Studio 似乎也使用 EE JDBC 传输。我已将此报告为问题 [2]。

您还可以在 JDBC 传输代码[3] 中看到,以 CALL 开头的 SQL 语句将导致 QueryRunner 上的更新。

您应该能够通过定义自己的 Sqlstatementsstrategyfactory[4] 来覆盖它。

[1] http://www.mulesoft.org/documentation/display/current/JDBC+Transport+Reference
[2] https://www.mulesoft.org/jira/browse/STUDIO-3817
[3] https:// /github.com/mulesoft/mule/blob/mule-3.x/transports/jdbc/src/main/java/org/mule/transport/jdbc/sqlstrategy/DefaultSqlStatementStrategyFactory.java
[4] http://www.mulesoft .org/documentation/display/current/JDBC+Transport+Configuration+Reference

// 本都

于 2013-10-24T14:57:57.597 回答
0

<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>

过程调用的示例语法

于 2015-05-23T06:38:30.160 回答