利用 dbms_xmlgen.getXML() 以文本形式输出XML数据文件:
/* 可以很快的直接得到XML数据文件,:(TXT文档太小)
但是当数据文件很大的情况下,执行效率大打折扣 . 一般说来 仅能作为小范围数据或者 测试所用*/
Procedure XML_PRINT(Errbuf Out Varchar2,Retcode Out Varchar2) Is
ctx dbms_xmlgen.ctxhandle;
c_result clob;
b Varchar2(5000);
Type ref_cursor Is Ref Cursor;
v_source ref_cursor;
c_long Number;
c_int Int;
--P_CONC_REQUEST_ID Number ;
Begin
UPDATE_XML_OUTPUT_FORMAT ;
--定义数据,数据集必须为游标变量
Open v_source For
Select HEADER_ID DN_HEADER_ID ,
SOLD_TO_ORG_ID PICK_SEQUENCE_ID ,
CUST_PO_NUMBER PS_HEADER_BATCH_NUM ,
ORG_ID BATCH_ID ,
SOLD_TO_ORG_ID DELIVERY_ID ,
ORDER_NUMBER DN_NUMBER ,
BOOKED_FLAG PRINTED_FLAG
From OE_ORDER_HEADERS_ALL
where rownum < 15;
--定义XML CLOB文件
ctx := dbms_xmlgen.newContext(v_source);
-- generate the CLOB as a result.
c_Result := dbms_xmlgen.getXML(ctx);
--以文本形式输出XML文件
c_long := length(c_result);
c_int := c_long/50-0.5;
For a In 1..c_int+1 Loop
b := dbms_lob.substr(c_result,50,(a-1)*50+1);
fnd_>le.PUT(fnd_>le.OUTPUT,b);
--dbms_output.put_line(b);
End Loop;
dbms_xmlgen.closeContext(ctx);
Close v_source;
End xml_print;
Procedure UPDATE_XML_OUTPUT_FORMAT Is
pragma autonomous_transaction;
BEGIN
UPDATE fnd_conc_pp_actions
SET argument5='RTF'
WHERE concurrent_request_id= fnd_pro>le.value('CONC_REQUEST_ID')
AND action_type=6;
COMMIT ;
END ;
评论3