我试图使用Spring的SimpleJdbcCall来执行Oracle数据库中的存储过程 .

存储过程如下:

CREATE OR REPLACE PROCEDURE INBOUND_TST."p_INB_GetTimedoutBatch"
(
  mRecordSet OUT SYS_REFCURSOR
  ,mMinAttempt IN NUMBER
)
......

在我的java代码中,我有这个:

new SimpleJdbcCall(jdbc)
    .withProcedureName("p_INB_GetTimedoutBatch")
    .returningResultSet("mRecordSet", new RowMapper<Retry>() {
        @Override
        public Retry mapRow(ResultSet rs, int rowNum) throws SQLException {
            .... map row ....
        }
    })
    .execute(...MapSqlParameterSource...);

我收到如下错误:

org.springframework.jdbc.BadSqlGrammarException:CallableStatementCallback;错误的SQL语法[{call“P_INB_GETTIMEDOUTBATCH”()}];嵌套异常是java.sql.SQLException:ORA-06550:第1行,第8列:PLS-00201:必须声明标识符'P_INB_GETTIMEDOUTBATCH'ORA-06550:第1行,第8列:PL / SQL:语句被忽略

我意识到这种情况正在发生,因为我的程序名称正在转换为大写情况,显然这个对象在数据库中不存在 .

当我使用jdbcTemplate直接处理自己的可调用语句并将调用字符串作为 {call "p_INB_GetTimedoutBatch"(?,?)} 传递时,我能够执行此操作
缺少引号是问题所在 .

我已经更改了SimpleJDBCCall代码以将过程名称传递为\“p_INB_GetTimedoutBatch \”,但它似乎没有任何影响,我得到相同的错误 .

这是spring jdbc中的一个bug吗?