Java 调用';DROP_QUEUE_TABLE';

Java 调用';DROP_QUEUE_TABLE';,java,oracle,parameter-passing,jdbctemplate,advanced-queuing,Java,Oracle,Parameter Passing,Jdbctemplate,Advanced Queuing,我正在尝试使用jdbcTemplate().update方法删除队列。那是- getJdbcTemplate().update("call DBMS_AQADM.DROP_QUEUE_TABLE (?, ?)", qTableName.toUpperCase(),true); DBMS_AQADM.DROP_QUEUE_表采用两个参数。1) 将表格列为字符串,将强制列为布尔值 当我尝试运行上面的代码时,我得到了- PreparedStatementCallback; bad SQL gramm

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

getJdbcTemplate().update("call DBMS_AQADM.DROP_QUEUE_TABLE (?, ?)", qTableName.toUpperCase(),true);
DBMS_AQADM.DROP_QUEUE_表采用两个参数。1) 将表格列为字符串,将强制列为布尔值

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

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)作为参数传递

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

布尔参数是。 建议您使用int参数编写自己的包装程序,或使用固定的TRUE参数传递PL/SQL块:

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

True不是Oracle布尔值。。。看,我找不到任何解决方案,我查看了aqapi类,我发现它们使用可调用语句,并执行匿名过程。它们在查询字符串中对参数进行联合分类。最终,我被迫在代码中执行同样的操作。