Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 AQ$_JMS_TEXT_MESSAGE to clob  [new]
Amberit
Member

Откуда: Киев
Сообщений: 765
Всем привет!

Помогите, пожалуйста, с решением следующей задачки...

Входные данные:

1. Таблица LOG с полем MESSAGE типа AQ$_JMS_TEXT_MESSAGE.
2. Сохраненные данные в этом поле.
3. MESSAGE.header - заполнен.
4. MESSAGE.text_len, MESSAGE.text_vc, MESSAGE.text_lob IS NULL.

Требуется:

Вычитать все содержимое поля MESSAGE в CLOB в удобоваримом виде, для дальнейшей рассылки по email.

Т.е. имеется в виду, сделать так, как делает, например, Oracle SQL Developer при

SELECT message FROM log;

MESSAGE                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
----------
SYS.AQ$_JMS_TEXT_MESSAGE(SYS.AQ$_JMS_HEADER(NULL,NULL,NULL,NULL,NULL,NULL,SYS.AQ$_JMS_USERPROPARRAY(SYS.AQ$_JMS_USERPROPERTY('PROPERTY1',100,'VALUE1',NULL,27),SYS.AQ$_JMS_USERPROPERTY('PROPERTY2',100,'VALUE2',NULL,27))),0,NULL,NULL)  


Конечно, можно парсить этот тип последовательно по полям, кот. описаны в доке, и формировать CLOB, но почему-то кажется, что есть наиболее простое решение...
28 май 14, 14:50    [16085729]     Ответить | Цитировать Сообщить модератору
 Re: AQ$_JMS_TEXT_MESSAGE to clob  [new]
Amberit
Member

Откуда: Киев
Сообщений: 765
Сам спросил, сам ответил. Может, кому будет полезно :)

Идея такая:

SET SERVEROUTPUT ON;
DECLARE
    out_cursor  sys_refcursor;
    l_ctx       DBMS_XMLGEN.ctxhandle;
    l_xml       xmltype;
    l_clob      clob;
BEGIN
    OPEN out_cursor
    FOR
        SELECT  message
        FROM    LOG
        WHERE   ROWNUM = 1;
        
    l_ctx := DBMS_XMLGEN.newContext(out_cursor);
    DBMS_XMLGEN.setNullHandling(l_ctx, 2);
    l_xml := DBMS_XMLGEN.getXMLType(l_ctx);
    l_clob := l_xml.getClobVal();
    
    DBMS_OUTPUT.put_line(l_clob);
END;
/


Путем XSL преобразований допиливается до нужной кондиции...
28 май 14, 18:26    [16087449]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить