Oracle:构造JMS消息的问题

时间:2009-09-07 11:31:29

标签: oracle plsql jms advanced-queuing

经过与Oracle Advanced Queuing and dbms_aq package的一些斗争 我遇到了另一个问题。我从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

我认为这段代码在程序体中起作用,因为我尝试了成功 来自What's in my JMS queue的食谱?

我的Oracle版本是: Oracle9i企业版9.2.0.1.0版 - 生产

知道什么是错的吗?

2 个答案:

答案 0 :(得分:2)

看起来像数据库版本问题。 AQ $ _JMS_STREAM_MESSAGE在10G中有一个构造方法,但在9i中没有。您使用的是哪个版本的Oracle Server?

答案 1 :(得分:1)

再次看起来像补助金

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

的作用:

desc sys.aq$_jms_stream_message

从SYS +您的架构中使用SQL * Plus吗?

请注意,SYS.AQ $ _JMS_STREAM_MESSAGE是数据库对象/类型,而SYS.DBMS_AQ是包

修改

好的......也许TYPE身体缺失/无效。做什么:

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

返回?