Spring SimpleJDBCCall没有引用Oracle Procedure Name

时间:2015-08-26 05:14:49

标签: spring oracle spring-jdbc

我正在尝试使用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中的错误吗?

0 个答案:

没有答案