首先说明,用很多工具都可以实现数据导出为XML文件,比如pl/sql developer中就可以把查询结果导出为csv,tsv,html,xml,sql文件,但是用存储过程实现的好处是,可以定时的导出。
SQL> create or replace directory exp_dir as 'e:\oracle';
目录已创建。
SQL> /
目录已创建。
SQL> create or replace procedure table2xml(result in out nocopy clob,
2 filename in varchar2) is
3 xmlstr varchar2(32767);
4 line varchar2(2000);
5 fhandle utl_file.file_type;
6 begin
7 fhandle := utl_file.fopen('EXP_DIR', filename, 'w');
8 xmlstr := dbms_lob.substr(result, 32767);
9 loop
10 exit when xmlstr is null;
11 line := substr(xmlstr, 1, instr(xmlstr, chr(10)) - 1);
12 dbms_output.put_line('| ' || line);
13 utl_file.put_line(fhandle, line);
14 xmlstr := substr(xmlstr, instr(xmlstr, chr(10)) + 1);
15 end loop;
16 utl_file.fclose(fhandle);
17 end;
18 /
过程已创建。
SQL> declare
2 queryctx dbms_xmlquery.ctxType;
3 result clob;
4 begin
5 queryctx := dbms_xmlquery.newContext('select username from all_users where username<>''SYSTEM
'' and username<>''SCOTT''');
6 result := dbms_xmlquery.getXML(queryctx);
7 table2xml(result, 'table2xml.xml');
8 dbms_xmlquery.closeContext(queryctx);
9 end;
10
11 /
PL/SQL 过程已成功完成。
SQL>
生成的table2xml.xml文件内容为
SEGMENT_STUDY
|
CDCPUB
|
OWBIVY
|
OWBIVY_10_2_0_3_33
|
OWB6
|
OWBRT_SYS
|
OWB_10_2_0_3_33
|
MGMT_VIEW
|
HRPAY
|
SQLSTUDY
|
HEALTH
|
SYSMAN
|
RMAN
|
BI
|
PM
|
SH
|
IX
|
OE
|
HR
|
OWB5
|
MDDATA
|
MDSYS
|
SI_INFORMTN_SCHEMA
|
ORDPLUGINS
|
ORDSYS
|
OLAPSYS
|
ANONYMOUS
|
XDB
|
CTXSYS
|
OWB_LIU
|
EXFSYS
|
WMSYS
|
DBSNMP
|
TSMSYS
|
DMSYS
|
DIP
|
OUTLN
|
SYS
|
GLOBAL
|
阅读(1237) | 评论(0) | 转发(0) |