0

Я пытаюсь удалить очередь с помощью метода jdbcTemplate(). Update. который -неправильное количество или типы аргументов при вызове 'DROP_QUEUE_TABLE'

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

DBMS_AQADM.DROP_QUEUE_TABLE принимает два параметра. 1) queue_table как строка и 2) принудительно в качестве логического.

WHN Я пытаюсь запустить приведенный выше код, я получаю -

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

Правда не является булево Oracle ... См http://stackoverflow.com/questions/30062/boolean-field-in-oracle – mylenereiners

ответ

0

Параметры BOOLEAN: not supported. Как Рекомендован написать собственную процедуру обертку с параметром INT или передать/SQL блок PL с фиксированным параметром ИСТИНА:

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

Я не мог найти какое-либо решение этого, я заглянул в классы aqapi, я обнаружил, что они использовали вызываемые выражения и выполняли анонимные процедуры. – Bopsi

+0

Они кокалировали параметры в строке запроса. В конечном итоге я был вынужден сделать то же самое в своем коде. – Bopsi