function XMLBuilder return clob is
doc DBMS_XMLDOM.DOMDocument; -- объект документа
rootElement DBMS_XMLDOM.DOMElement; -- корневой элемент параметров Л/С
paramsElement1 DBMS_XMLDOM.DOMElement; -- элемент 1 уровня
paramsElement2 DBMS_XMLDOM.DOMElement; -- элемент 2 уровня
node DBMS_XMLDOM.DOMNode; -- узел
c CLOB;
-- курсор для последовательной генерации элементов
cursor cur is
select rownum from all_users where rownum < 5;
x integer; -- хранение переменной из курсора
begin
doc := dbms_xmldom.createDocument('http://www.w3.org/2001/XMLSchema',
null,
null);
rootElement := DBMS_XMLDOM.createElement(doc, 'ROOT'); -- корневой элемент
node := DBMS_XMLDOM.appendChild(DBMS_XMLDOM.makeNode(doc),
DBMS_XMLDOM.makeNode(rootElement));
DBMS_XMLDOM.setAttribute(rootElement, 'param1', 1); -- атрибуты корн. эл.
DBMS_XMLDOM.setAttribute(rootElement, 'param2', 'v');
-- 1 уровень
paramsElement1 := DBMS_XMLDOM.createElement(doc, 'LEVEL1');
-- paramsElement1 является дочерним по отношению к rootElement
node := DBMS_XMLDOM.appendChild(DBMS_XMLDOM.makeNode(rootElement),
DBMS_XMLDOM.makeNode(paramsElement1));
-- узлы-элементы 1 уровня
open cur;
loop
fetch cur
into x;
exit when cur%NOTFOUND;
paramsElement2 := DBMS_XMLDOM.createElement(doc, 'UNIT');
helpNode := DBMS_XMLDOM.appendChild(DBMS_XMLDOM.makeNode(paramsElement1),
DBMS_XMLDOM.makeNode(paramsElement2));
DBMS_XMLDOM.setAttribute(paramsElement1, 'param', x);
end loop;
close cur;
dbms_lob.createtemporary(c, true, dbms_lob.session);
c := 'dddd'; -- так работать не будет
dbms_xmldom.writeToClob(doc, c);
return('' || chr(10) || c);
end;