declare
gc_date date := sysdate;
l_crsr sys_refcursor;
function to_xml1(a_cursor sys_refcursor) return xmltype is
l_xml xmltype;
begin
execute immediate q'[alter session set nls_date_format = 'yyyy-mm-dd"T"hh24:mi:ss']';
l_xml := xmltype.createxml(a_cursor);
close a_cursor;
execute immediate q'[alter session set nls_date_format = 'dd-MON-yy']';
return l_xml;
end;
function to_xml2(a_cursor sys_refcursor) return xmltype is
l_xml xmltype;
l_ctx number;
begin
execute immediate q'[alter session set nls_date_format = 'yyyy-mm-dd"T"hh24:mi:ss']';
l_ctx := dbms_xmlgen.newContext(l_crsr);
l_xml := dbms_xmlgen.getxmltype(l_ctx);
dbms_xmlgen.closecontext(l_ctx);
close a_cursor;
execute immediate q'[alter session set nls_date_format = 'dd-MON-yy']';
return l_xml;
end;
function to_xml3(a_cursor sys_refcursor) return xmltype is
l_xml xmltype;
begin
execute immediate q'[alter session set nls_date_format = 'yyyy-mm-dd"T"hh24:mi:ss']';
select xmlagg(value(a))
into l_xml
from table(xmlsequence(a_cursor)) a;
close a_cursor;
execute immediate q'[alter session set nls_date_format = 'dd-MON-yy']';
return l_xml;
end;
begin
open l_crsr for
select gc_date-1 some_date, sysdate another_date, cast(null as number) num
from dual
connect by level <= 2;
dbms_output.put_line(to_xml1(l_crsr).getclobval());
open l_crsr for
select gc_date-1 some_date, sysdate another_date, cast(null as number) num
from dual
connect by level <= 2;
dbms_output.put_line(to_xml2(l_crsr).getclobval());
open l_crsr for
select gc_date-1 some_date, sysdate another_date, cast(null as number) num
from dual
connect by level <= 2;
dbms_output.put_line(to_xml3(l_crsr).getclobval());
end;