如何在<int-jdbc:stored-proc-outbound-gateway>

时间:2017-06-27 18:44:14

标签: spring-integration

我们使用以下配置来执行Oracle存储过程。存储过程(GET_FRMA)在模式中 - &gt; XX_EMPROC

我们有一个用户 - &gt; XX_EMUSER已被授予存储过程的执行权限。

我需要指定架构名称 - &gt; XX_EMPROC在以下配置中。

    <int-jdbc:stored-proc-outbound-gateway
            id="outbound-gateway-storedproc-get-forma" data-source="dataSource"
            is-function="false"
            stored-procedure-name="GET_FRMA"
            expect-single-result="true">

        <int-jdbc:sql-parameter-definition name="V_REF_ID" direction="IN" />
        <int-jdbc:sql-parameter-definition name="V_FRMA"   direction="OUT" type="#{T(oracle.jdbc.OracleTypes).CLOB}"/>

        <int-jdbc:parameter name="V_REF_ID" expression="payload" />
    </int-jdbc:stored-proc-outbound-gateway>

请注意,使用用户创建数据源时 - &gt; XX_EMPROC它工作正常,但当我们使用用户 - &gt; XX_EMUSER我们得到以下错误。

  • 错误:

嵌套异常是org.springframework.dao.InvalidDataAccessApiUsageException:无法确定正确的呼叫签名 - 没有&#39; GET_FRMA&#39;&#34; 的程序/功能/签名

1 个答案:

答案 0 :(得分:1)

要让它工作,您应该指定GLES20.glReadPixels以及架构名称:

stored-procedure-name

但与此同时你必须指明:

stored-procedure-name="XX_EMPROC.GET_FRMA"

这意味着:

ignore-column-meta-data="true"

这些选项与<xsd:attribute name="ignore-column-meta-data" default="false" use="optional"> <xsd:annotation> <xsd:documentation> If true, the JDBC parameter definitions for the stored procedure are not automatically derived from the underlying JDBC connection. In that case you must specify all Sql parameter definitions explicitly using the 'sql-parameter-definition' sub-element. </xsd:documentation> </xsd:annotation> <xsd:simpleType> <xsd:union memberTypes="xsd:boolean xsd:string" /> </xsd:simpleType> </xsd:attribute> 选项相关:

CallMetaDataContext

结果是:

/**
 * Specify whether call parameter metadata should be accessed.
 */
public void setAccessCallParameterMetaData(boolean accessCallParameterMetaData) {
    this.accessCallParameterMetaData = accessCallParameterMetaData;
}

这就是为什么我们有JIRA票。

但另一方面,自动/** * Initialize the database specific management of procedure column meta data. * This is only called for databases that are supported. This initialization * can be turned off by specifying that column meta data should not be used. * @param databaseMetaData used to retrieve database specific information * @param catalogName name of catalog to use (or {@code null} if none) * @param schemaName name of schema name to use (or {@code null} if none) * @param procedureName name of the stored procedure * @throws SQLException in case of initialization failure * @see org.springframework.jdbc.core.simple.SimpleJdbcCall#withoutProcedureColumnMetaDataAccess() */ void initializeWithProcedureColumnMetaData(DatabaseMetaData databaseMetaData, @Nullable String catalogName, @Nullable String schemaName, @Nullable String procedureName) throws SQLException; 会导致对DB的额外调用,这实际上不是结果将是您在应用程序中的预期。我建议总是关掉它。至少对于Oracle来说。