我试图使用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吗?