我的oracle数据库中有一个名为GET_ACS_SERVER_AUTH_METHOD_REP
的函数。
这是我在数据库中执行函数调用的方法:
public String getAuthReport () throws SQLException {
final Connection connection = jdbcTemplate.getDataSource().getConnection();
List <SqlParameter> declaredParameters = new ArrayList <SqlParameter>();
declaredParameters.add(new SqlParameter("start_d", Types.DATE));
declaredParameters.add(new SqlParameter("end_d", Types.DATE));
declaredParameters.add(new SqlOutParameter("return", Types.CLOB));
Map <String, Object> resultMap = jdbcTemplate.call(new CallableStatementCreator() {
@Override
public CallableStatement createCallableStatement (Connection con) throws SQLException {
CallableStatement callableStatement = connection.prepareCall("{call GET_SERVER_AUTH_METHOD_REP(?, ?, ?)}");
callableStatement.setDate(1, java.sql.Date.valueOf("2016-01-01"));
callableStatement.setDate(2, java.sql.Date.valueOf("2017-06-30"));
callableStatement.registerOutParameter(3, Types.CLOB);
return callableStatement;
}
}, declaredParameters);
return "success";
}
遗憾的是,这不起作用并返回此错误:
Caused by: java.sql.SQLException: ORA-06550: line 1, column 7:
PLS-00201: identifier 'GET_ACS_SERVER_AUTH_METHOD_REP' must be declared
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
我问过我们的DBA我是否可能缺少某些权限,但他说没有。
此外,我还读到oracle版本12时oracle / spring存在一些错误。
也许有人遇到类似的东西并设法解决它?
谢谢!
答案 0 :(得分:0)
如果这是你的功能定义
create or replace FUNCTION get_server_auth_method_rep(start_d DATE, end_d DATE) return CLOB
代码应如下所示。
CallableStatement callableStatement = con.prepareCall("{? = call GET_SERVER_AUTH_METHOD_REP(?,?)}");
callableStatement.registerOutParameter(1, Types.CLOB);
callableStatement.setDate(2, java.sql.Date.valueOf("2016-01-01"));
callableStatement.setDate(3, java.sql.Date.valueOf("2017-06-30"));
答案 1 :(得分:0)
事实证明,我传递给具有调用数据库中函数的方法的类的构造函数的DataSource
bean是使用错误的数据库凭据传递的。我有多个DataSources,我必须使用@Qualifier
注释来定义要传入的正确数据。