function XMLBuilder return clob is
doc DBMS_XMLDOM.DOMDocument; -- Document object
rootElement DBMS_XMLDOM.DOMElement; -- Root element of parameters
paramsElement1 DBMS_XMLDOM.DOMElement; -- Level 1 element
paramsElement2 DBMS_XMLDOM.DOMElement; -- Level 2 element
node DBMS_XMLDOM.DOMNode; -- Node
c CLOB;
-- Cursor for sequential generation of elements
cursor cur is
select rownum from all_users where rownum < 5;
x integer; -- Variable to store cursor value
begin
doc := dbms_xmldom.createDocument('http://www.w3.org/2001/XMLSchema',
null,
null);
rootElement := DBMS_XMLDOM.createElement(doc, 'ROOT'); -- Root element
node := DBMS_XMLDOM.appendChild(DBMS_XMLDOM.makeNode(doc),
DBMS_XMLDOM.makeNode(rootElement));
DBMS_XMLDOM.setAttribute(rootElement, 'param1', 1); -- Root element attributes
DBMS_XMLDOM.setAttribute(rootElement, 'param2', 'v');
-- Level 1
paramsElement1 := DBMS_XMLDOM.createElement(doc, 'LEVEL1');
-- paramsElement1 is a child of rootElement
node := DBMS_XMLDOM.appendChild(DBMS_XMLDOM.makeNode(rootElement),
DBMS_XMLDOM.makeNode(paramsElement1));
-- Level 1 element nodes
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'; -- This will not work
dbms_xmldom.writeToClob(doc, c);
return('' || chr(10) || c);
end;