代码之家  ›  专栏  ›  技术社区  ›  Michał Niklas

Oracle:构造JMS消息时出现问题

  •  1
  • Michał Niklas  · 技术社区  · 15 年前

    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版本是:

    你知道会出什么问题吗?

    2 回复  |  直到 8 年前
        1
  •  2
  •   Rene    15 年前

    看起来像是数据库版本问题。AQ$\u JMS\u STREAM\u消息在10G中有构造方法,但在9i中没有。您使用的是什么版本的Oracle Server?

        2
  •  1
  •   cagcowboy    15 年前

    看起来又是格兰特了

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

    做:

    desc sys.aq$_jms_stream_message
    

    请注意,SYS.AQ$\u JMS\u STREAM\u消息是一个datbase对象/类型,而SYS.DBMS\u AQ是一个包

    编辑

    好啊可能类型正文缺失/无效。什么是:

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

    回来