我对 Spring JDBC 真的很陌生。我有 3 个没有共享数据的 JUnit 测试(不需要之前/之后的方法,因为它们在自己的数据文件中有自己的数据)
这些测试中的每一个都调用包内的存储过程。如果我单独运行测试,它们都通过但运行所有三个,一个失败:(如果我改变班级中测试的顺序,失败的一个会改变)
对存储过程的调用使用 Spring JDBC:
SimpleJdbcCall callProcedure = new SimpleJdbcCall(jdbcTemplate)
.withCatalogName("ADMIN.CALCULATE")
.withProcedureName("GET_TOTALS")
.useInParameterNames("account_no", "request_list")
.withoutProcedureColumnMetaDataAccess()
.declareParameters(
new SqlParameter("account_no", Types.INTEGER),
new SqlParameter("request_list", OracleTypes.ARRAY, "ADMIN.CALC_REQUEST_TAB"),
new SqlOutParameter("response_list", OracleTypes.ARRAY, "ADMIN.CALC_RESPONSE_TAB"));
callProcedure.compile();
Map<String, Object> inputParams = new HashMap<String, Object>();
// set StructDescriptor and ArrayDescriptor
genericTypeDTO.setStructDescriptorName("ADMIN.T_CALC_REQUEST_TYPE");
genericTypeDTO.setArrayDescriptorName("ADMIN.CALC_REQUEST_TAB");
inputParams.put("account_no", accountNo);
inputParams.put("clawback_list", genericTypeDTO);
Map<String, Object> outData = (Map<String, Object>) callProcedure.execute(inputParams);
以下是针对其中一项测试点击callProcedure.execute(inputParams)时引发的异常:
引起:org.springframework.jdbc.BadSqlGrammarException: CallableStatementCallback; 错误的 SQL 语法 [{call ADMIN.CALCULATE.GET_TOTALS(?, ?, ?)}]; 嵌套异常是 java.sql.SQLException: ORA-06533: 下标超出计数 ORA-06512: at "ADMIN.CALCULATE", line 2160 ORA-06512: at line 1
任何意见,将不胜感激。