[英]Spring: JdbcTemplate throws a PLS-00201 while trying to call a stored db function
我的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有一些錯誤。
也許有人遇到類似問題並設法解決了?
謝謝!
如果這是您的功能定義
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"));
原來,我的DataSource
bean是通過錯誤的db憑據傳遞的,該DataSource
bean傳遞到了具有在數據庫中調用該函數的方法的類的構造函數中。 我有多個數據源,必須使用@Qualifier
批注定義正確的數據源。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.