【问题标题】:Oracle: problem with constructing JMS messageOracle:构造 JMS 消息的问题
【发布时间】:2009-09-07 21:19:27
【问题描述】:

经过与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 版 - 生产

知道什么是错的吗?

【问题讨论】:

    标签: oracle plsql jms advanced-queuing


    【解决方案1】:

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

    【讨论】:

    • 抱歉,版本在您的帖子中。所以你的代码可能不会在 Oracle 9i 数据库上运行
    • 是的,这可能是版本问题。我没有检查 Oracle 手册中的版本信息。谢谢!
    【解决方案2】:

    看起来又是赠款

    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'
    

    返回?

    【讨论】:

    • GRANT 成功,desc 适用于两种模式,但函数无法编译。
    • 选择结果:SYS, AQ$_JMS_STREAM_MESSAGE, TYPE, VALID
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-02
    • 1970-01-01
    • 1970-01-01
    • 2016-08-07
    • 2011-12-12
    • 2011-05-02
    相关资源
    最近更新 更多