1

在与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

知道有什么问题吗?

4

2 回答 2

2

看起来是数据库版本问题。AQ$_JMS_STREAM_MESSAGE 在 10G 中有构造方法,但在 9i 中没有。您使用的是什么版本的 Oracle 服务器?

于 2009-09-07T13:19:27.517 回答
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'

返回?

于 2009-09-07T11:41:39.880 回答