Tuesday, May 31, 2011

Creating XML

set serveroutput on size 100000;
DECLARE
a CLOB;
ctx DBMS_XMLGEN.ctxhandle;
c_amount CONSTANT BINARY_INTEGER := 32767;
l_buffer VARCHAR2 (32767);
l_chr10 PLS_INTEGER;
l_cloblen PLS_INTEGER;
l_fhandler UTL_FILE.file_type;
l_pos PLS_INTEGER := 1;
BEGIN
ctx := DBMS_XMLGEN.newcontext ('select * from ORDERS_MVA1COB where rownum<4');
DBMS_XMLGEN.setrowsettag (ctx, 'ORDERS');
DBMS_XMLGEN.setrowtag (ctx, 'ORDER');
a := DBMS_XMLGEN.getxml (ctx);
l_cloblen := DBMS_LOB.getlength (a);

WHILE l_pos < l_cloblen
LOOP
l_buffer := DBMS_LOB.SUBSTR (a, c_amount, l_pos);
EXIT WHEN l_buffer IS NULL;
l_chr10 := INSTR (l_buffer, CHR (10), -1);

IF l_chr10 != 0
THEN
l_buffer := SUBSTR (l_buffer, 1, l_chr10 - 1);
END IF;

DBMS_OUTPUT.put_line (l_buffer);
l_pos := l_pos + LEAST (LENGTH (l_buffer) + 1, c_amount);
END LOOP;
END;