oracle 10g 用dbms_xmlgen将数据表转成xml格式

oracle 10g中,有两个包,用于处理xml格式:  dbms_xmlgen 和 dbms_xmlstore.
 
1.创建临时表,写入两条数据:
 create table xmldemo (
   a number,
   b varchar2(10)
 );
 
 insert into xmldemo values (10,'first line');
 insert into xmldemo values (20,'line 2');
 commit;
 
 
2.使用dbms_xmlgen生成数据表的xml格式
declare
  xmlhdl dbms_xmlgen.ctxtype;
  line varchar2(200);
  xmltext varchar2(32767);
begin
  -- create ctxhandle
  xmlhdl := dbms_xmlgen.newcontext('select * fromxmldemo');
  --generate xml format data into clob
  xmltext :=dbms_xmlgen.getxml(xmlhdl);
  --display the xml content
loop
  exit when xmltext is null;
  line :=substr(xmltext,1,instr(xmltext,chr(10))-1);
 dbms_output.put_line(line); 
  xmltext :=substr(xmltext,instr(xmltext,chr(10))+1);
end loop;
  --close ctxhandle
  dbms_xmlgen.closecontext(xmlhdl);
end;
 
输出结果:
<?xmlversion="1.0"?>
<ROWSET>
 <ROW>
  <A>10</A>
  <B>first line</B>
 </ROW>
 <ROW>
  <A>20</A>
  <B>line 2</B>
 </ROW>
</ROWSET>
 
3.dbms_xmlgen其它函数
  getnumrowsprocessed(xmlhandle):=getxml所处理的实际行数
  dbms_xmlgen.setMaxRows(xmlhdl,10):=允许处理最大行数
  dbms_xmlgen.setrowsettag(xmlhdl,'Packet'):=重置行集标签rowset
  dbms_xmlgen.setrowtag(xmlhdl,'Record'):=重置行标签row
  dbms_xmlgen.setnullhandling(xmlhdl,2):=列空值如何表示,如:<A/>
 
上例修改:
 
  插入空值数据:
 insert into xmldemo values ('30',NULL);
  insert into xmldemo values (null,'No.4');
  commit;

  代码修改:
declare
  xmlhdl dbms_xmlgen.ctxtype;
  line varchar2(200);
  xmldoc clob;
  xmltext varchar2(32767);
  flag boolean;
begin
  -- create ctxhandle
  xmlhdl := dbms_xmlgen.newcontext('select * fromxmldemo');
  --custerm config
  dbms_xmlgen.setMaxRows(xmlhdl,10);
  dbms_xmlgen.setrowsettag(xmlhdl,'Packet');
  dbms_xmlgen.setrowtag(xmlhdl,'Record');
 dbms_xmlgen.setnullhandling(xmlhdl,dbms_xmlgen.EMPTY_TAG);
 
  -- generate xml format data into clob
    xmldoc :=dbms_xmlgen.getxml(xmlhdl);
  --display the xml content
  xmltext := dbms_lob.substr(xmldoc);
loop
  exit when xmltext is null;
  line :=substr(xmltext,1,instr(xmltext,chr(10))-1);
 dbms_output.put_line(line); 
  xmltext :=substr(xmltext,instr(xmltext,chr(10))+1);
end loop;
 
  -- get row count
 dbms_output.put_line(dbms_xmlgen.getnumrowsprocessed(xmlhdl));
 
  -- close ctxhandle
  dbms_xmlgen.closecontext(xmlhdl);
end;
 
输出结果:
<?xmlversion="1.0"?>
<Packet>
 <Record>
  <A>10</A>
  <B>first line</B>
 </Record>
 <Record>
  <A>20</A>
  <B>line 2</B>
 </Record>
 <Record>
  <A>30</A>
  <B/>
 </Record>
 <Record>
  <A/>
  <B>No.4</B>
 </Record>
</Packet>
4

 
另:xmlhdl的类型为ctxtype或ctxhandle时,结果是一样的。
不知道oracle出于什么目的,待考
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值