将oracle xmltype表字段选择到xmltype变量中会导致空对象
这已经困扰了我一段时间了。我使用oracle streams将消息作为存储过程的一部分写入oracle AQ队列。下面是存储过程,显示了相关部分:将oracle xmltype表字段选择到xmltype变量中会导致空对象,oracle,plsql,xmltype,Oracle,Plsql,Xmltype,这已经困扰了我一段时间了。我使用oracle streams将消息作为存储过程的一部分写入oracle AQ队列。下面是存储过程,显示了相关部分: 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_me
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。目前情况如下:
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自参数进行方法分派
ORA-06512:在第22行
似乎我可以将和XMLTYPE变量插入到XMLTYPE字段中,但反过来不行???只要我一发布我就可以解决它 忘记构造l_消息:
l_message := sys.aq$_jms_text_message.construct;
啊 我很荣幸为这件事给自己打勾,或者为浪费自己太多的时间给自己打勾。写下这个问题会让你想得更清楚,如果可能的话,也会让你自己解决它。简直是浪费时间。我想Stackoverflow的所有人都可以说:很高兴能帮上忙。