declaredParameters 与 addDeclaredParameter SimpleJdbcCall

问题描述 投票:0回答:1

所以我正在使用 Oracle 数据库和函数,而不是存储过程。我认为这没什么大不了的,并继续像我以前为存储过程创建的所有 DAO 一样。这不起作用。差异如下所示。

这是运行良好的功能设置:

public void setDataSource(DataSource dataSource) {
    this.findClassYear = new SimpleJdbcCall(dataSource)
                            .withSchemaName("CONNMAN")
                            .withFunctionName("F_CC_GET_STUCLASS")
                            .declareParameters(
                                    new SqlOutParameter("p_classout", Types.VARCHAR),
                                    new SqlParameter("p_pidm", Types.NUMERIC)
                            )
                            .withoutProcedureColumnMetaDataAccess();

    this.findClassYear.setAccessCallParameterMetaData(false);
    this.findClassYear.setFunction(true);
}

与我用于存储过程的设置类似,这是行不通的:

public void setDataSource(DataSource dataSource) {
    this.findClassYear = new SimpleJdbcCall(dataSource)
                            .withSchemaName("CONNMAN")
                            .withFunctionName("F_CC_GET_STUCLASS");

    this.findClassYear.setAccessCallParameterMetaData(false);
    this.findClassYear.setFunction(true);

    //in parameters
    this.findClassYear.addDeclaredParameter(new SqlParameter("p_pidm", Types.NUMERIC));

    //out parameters
    this.findClassYear.addDeclaredParameter(new SqlOutParameter("p_classout", Types.VARCHAR));
}

两者都可以在 JUnit 测试中正常执行,但只有第一个产生真正的结果。为什么我不能对函数使用动态声明的参数和/或者这是造成此更改的唯一原因?如果有的话我还缺少什么?

java spring-jdbc
1个回答
0
投票

表值参数的限制

表值参数有几个限制:

  1. 您无法将表值参数传递给用户定义的函数。
  2. 表值参数只能建立索引以支持 UNIQUE 或 PRIMARY KEY 约束。 SQL Server 不维护表值参数的统计信息。
  3. 表值参数在 Transact-SQL 代码中是只读的。你 无法更新表值行中的列值 参数,并且您无法插入或删除行。修改数据 传递给存储过程或参数化语句 表值参数,必须将数据插入临时 表或表变量中。

4 - 不能使用 ALTER TABLE 语句来修改设计 表值参数。

5-您可以在表值参数中流式传输大型对象。

来源:微软网站

© www.soinside.com 2019 - 2024. All rights reserved.