簡體   English   中英

春季:JdbcTemplate嘗試調用存儲的db函數時拋出PLS-00201

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM