Oracle: проблема с построением JMS-сообщения

После некоторой борьбы с Oracle Advanced Queuing и пакетом dbms_aq я столкнулся с другая проблема. Я скопировал код из руководств Oracle, но когда я компилирую этот код:

create or replace
procedure jms_test(msg varchar2)
is
    id                 pls_integer;
    message            sys.aq$_jms_stream_message;
    enqueue_options    dbms_aq.enqueue_options_t;
    message_properties dbms_aq.message_properties_t;
begin
    message := sys.aq$_jms_stream_message.construct(0);
    message.set_string_property('FROM', 'TEST');
    id := message.clear_body(-1);
end;

он жалуется на:

Error(9,40): PLS-00302: component 'CONSTRUCT' must be declared
Error(10,10): PLS-00302: component 'SET_STRING_PROPERTY' must be declared
Error(11,16): PLS-00302: component 'CLEAR_BODY' must be declared

Я думаю, что этот код работает вне тела процедуры, потому что я успешно пробовал рецепты из Что находится в моей очереди JMS?

Моя версия Oracle: Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production

Есть идеи, что может быть не так?


person Michał Niklas    schedule 07.09.2009    source источник


Ответы (2)


Похоже, проблема с версией базы данных. AQ $ _JMS_STREAM_MESSAGE имеет метод построения в 10G, но не в 9i. Какую версию Oracle Server вы используете?

person Rene    schedule 07.09.2009
comment
Извините, версия есть в вашем посте. Таким образом, ваш код, вероятно, не будет работать в базе данных Oracle 9i - person Rene; 07.09.2009
comment
Да, вероятно, это проблема версии. Я не проверял информацию о версии из руководства Oracle. Спасибо! - person Michał Niklas; 08.09.2009

Похоже, снова гранты

GRANT EXECUTE ON SYS.aq$_jms_stream_message To <your-user>;

Делает:

desc sys.aq$_jms_stream_message

работать в SQL * Plus как из SYS + по вашей схеме?

Обратите внимание, что SYS.AQ $ _JMS_STREAM_MESSAGE - это объект / тип базы данных, тогда как SYS.DBMS_AQ - это пакет

ИЗМЕНИТЬ

Хорошо ... возможно тело ТИПА отсутствует / недействительно. Что значит:

SELECT owner, object_name, object_type, status
FROM   dba_OBJECTS
WHERE  OBJECT_NAME = 'AQ$_JMS_STREAM_MESSAGE'

возвращение?

person cagcowboy    schedule 07.09.2009
comment
GRANT завершился успешно, desc работает с обеими схемами, но функция не может быть скомпилирована. - person Michał Niklas; 07.09.2009
comment
Результат выбора: SYS, AQ $ _JMS_STREAM_MESSAGE, TYPE, VALID - person Michał Niklas; 08.09.2009