2011-01-07 5 views

ответ

2
DBMS_XMLDOM.WRITETOBUFFER Writes the contents of the node to a buffer. 
DBMS_XMLDOM.WRITETOCLOB Writes the contents of the node to a CLOB. 
DBMS_XMLDOM.WRITETOFILE Writes the contents of the node to a file. 

У меня есть PL/SQL кода, который wites в файловую систему, используя КАТАЛОГ:

dbms_xmldom.writeToFile(dbms_xmldom.newDOMDocument(xmldoc) 
             ,'DATAPUMPDIR/myfile.xml') ; 

Я создал функцию, используя dbms_xmldom.writetoclob

create or replace function xml2clob (xmldoc XMLType) return CLOB is 
    clobdoc CLOB := ' '; 
    begin 
    dbms_xmldom.writeToClob(dbms_xmldom.newDOMDocument(xmldoc) 
             ,clobdoc) ; 
    return clobdoc; 
    end; 
/

Запрос:

SELECT xml2clob(Sys_Xmlagg(
     Xmlelement(Name "dummy" 
        ,dummy 
        ),Xmlformat('dual'))) 
    FROM dual; 

Выход:

<?xml version="1.0"?> 
<dual> 
    <dummy>X</dummy> 
</dual> 

Вы можете попробовать использовать такую ​​функцию:

create or replace function dom2clob (domdoc DBMS_XMLDOM.DOMDocument) return CLOB is 
    clobdoc CLOB := ' '; 
    begin 
    dbms_xmldom.writeToClob(domdoc,clobdoc) ; 
    return clobdoc; 
    end; 
/
2

Вы можете сделать то же самое, как и в:

"SELECT xml2clob(Sys_Xmlagg(Xmlelement(Name "dummy",dummy),Xmlformat('dual'))) FROM dual;" 

с:

SELECT 
    Sys_Xmlagg(Xmlelement(Name "dummy",dummy) 
    ,Xmlformat('dual')).Extract('/*').getClobVal() as "test" 
FROM dual; 

, и вы не должны создавать функцию "xml2clob"

.Extract('/*') для "красивой печати"

выход:

<dual> 
    <dummy>X</dummy> 
</dual> 
0

Если у вас уже есть XMLType просто использовать функция getClobVal()

xmldoc.getClobVal() 

Это возвращает ваш X MLType как clob без дополнительных накладных расходов.