所以我使用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测试中正常执行,但只有第一个产生实际结果。为什么我不能为函数使用动态声明的参数和/或是唯一负责此更改的东西?如果有什么我还缺少什么?