首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在xmltype变量中选择oracle xmltype表字段将导致空对象

在xmltype变量中选择oracle xmltype表字段将导致空对象
EN

Stack Overflow用户
提问于 2012-06-14 07:42:04
回答 1查看 2K关注 0票数 0

这件事已经困扰我一段时间了。我正在使用oracle stream将消息作为存储过程的一部分写入oracle AQ队列。下面是存储的proc,以及显示的相关部分:

代码语言:javascript
复制
CREATE OR REPLACE PROCEDURE ESBEVENT.esb_dml_handler(in_any IN ANYDATA) IS

l_enqueue_options dbms_aq.enqueue_options_t;
l_message_properties dbms_aq.message_properties_t;
l_message sys.aq$_jms_text_message;
l_msgid raw(16);
l_xmlmsg SYS.XMLTYPE;
err_num NUMBER;
err_msg VARCHAR2(100);

BEGIN
    BEGIN
    l_message := sys.aq$_jms_text_message.construct;
    l_xmlmsg := DBMS_STREAMS.CONVERT_LCR_TO_XML(in_any);
    l_message.set_text(l_xmlmsg.getClobVal());

    dbms_aq.enqueue
    ( queue_name => 'esbevent.esb_jms_queue'
    , enqueue_options => l_enqueue_options
    , message_properties => l_message_properties
    , payload => l_message
    , msgid => l_msgid
    );
    COMMIT;

    err_num := '';
    err_msg := 'Message Queued Successfully';

    EXCEPTION
    WHEN OTHERS THEN
        err_num := SQLCODE;
        err_msg := SUBSTR(SQLERRM, 1, 1000);
        INSERT INTO esbevent.esb_dml_handler_error_t VALUES (SYSDATE, err_num||' - '||err_msg );
END;

INSERT INTO esbevent.esb_jms_msg_memento_t VALUES (esb_jms_msg_memento_seq.nextval,     SYSDATE, l_xmlmsg, err_num||' - '||err_msg );
COMMIT;


END;

在入队之后,我将作为XMLTYPE发送的消息存储在表esb_jms_msg_memento_t中。这是为了在后续处理中出现问题时启用重新发送。我现在正在尝试编写一个代码块来提取XMLTYPE字段数据,并将其再次写入AQ。目前如下所示:

代码语言:javascript
复制
DECLARE
   l_enqueue_options      DBMS_AQ.ENQUEUE_OPTIONS_T;
   l_message_properties   DBMS_AQ.MESSAGE_PROPERTIES_T;
   l_message              SYS.aq$_jms_text_message;
   l_msgid                RAW (16);
   l_xmlmsg               XMLTYPE;

BEGIN
   SELECT msg_payload
     INTO l_xmlmsg
     FROM esb_jms_msg_memento_t
    WHERE UNIQUE_ID = '815929';

   l_message.set_text (l_xmlmsg.getClobVal ()); --null self error here


   DBMS_AQ.enqueue (queue_name           => 'esbevent.esb_jms_queue',
                    enqueue_options      => l_enqueue_options,
                    message_properties   => l_message_properties,
                    payload              => l_message,
                    msgid                => l_msgid);
   COMMIT;
END;

当我运行这个命令时,我得到了这个错误:

ORA-30625:不允许对NULL SELF参数执行方法调度ORA-06512:在第22行

似乎我可以将和XMLTYPE变量插入到XMLTYPE字段,但不能反过来?

EN

回答 1

Stack Overflow用户

发布于 2012-06-14 08:43:46

我一发帖就解决了.

忘记构造l_message:

代码语言:javascript
复制
l_message := sys.aq$_jms_text_message.construct;

多!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11024918

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档