调用' DROP_QUEUE_TABLE'参数的错误数量或类型

时间:2015-07-14 11:15:07

标签: java oracle parameter-passing jdbctemplate advanced-queuing

我正在尝试使用jdbcTemplate()。update方法删除队列。这是 -

getJdbcTemplate().update("call DBMS_AQADM.DROP_QUEUE_TABLE (?, ?)", qTableName.toUpperCase(),true);

DBMS_AQADM.DROP_QUEUE_TABLE有两个参数。 1)queue_table为string,2)force为boolean。

当我尝试运行上面的代码时,我得到了 -

PreparedStatementCallback; bad SQL grammar [call DBMS_AQADM.DROP_QUEUE_TABLE (?, ?)]; nested exception is java.sql.SQLException: ORA-06553: PLS-306: wrong number or types of arguments in call to 'DROP_QUEUE_TABLE'
ORA-06553: PLS-306: wrong number or types of arguments in call to 'DROP_QUEUE_TABLE'

但是当我运行以下代码时,它可以正常工作 -

getJdbcTemplate().update("call DBMS_AQADM.CREATE_QUEUE_TABLE (?, ?)", qTableName.toUpperCase(), payloadType.toUpperCase());

我猜测的是,问题是将oracle对象(不是varchar或int)作为参数传递。

我真的很想知道有没有办法解决这个问题。

1 个答案:

答案 0 :(得分:0)

BOOLEAN参数为not supported。 推荐使用int参数编写自己的包装程序或传递具有固定TRUE参数的PL / SQL块:

BEGIN
   DBMS_AQADM.DROP_QUEUE_TABLE( 
      queue_table        => ?, 
      force              => TRUE); 
END;