我正在尝试使用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&#34; P_INB_GETTIMEDOUTBATCH&#34;()}];嵌套异常是java.sql.SQLException:ORA-06550:第1行,第8列:
PLS-00201:标识符&#39; P_INB_GETTIMEDOUTBATCH&#39;必须申报 ORA-06550:第1行,第8栏:
PL / SQL:忽略语句
我意识到这种情况正在发生,因为我的程序名称正在转换为大写情况,显然这个对象在数据库中不存在。
当我使用jdbcTemplate直接处理自己的可调用语句并将调用字符串作为 {call \&#34; p_INB_GetTimedoutBatch \&#34;(?,?)} <时,我能够执行此操作/强>
钍
缺少引号是问题所在。
我更改了SimpleJDBCCall代码以将过程名称传递为\&#34; p_INB_GetTimedoutBatch \&#34;但它似乎没有任何影响,我得到同样的错误。
这是spring jdbc中的错误吗?