将Oracle表数据转成xml文件格式的PL/SQL 过程

将Oracle表数据转成xml文件格式的PL/SQL 过程

   在工作中为了实现某种功能总结的一些文档想在此保存。文档供大家参考学习使用。如有参考其他文档,网址我会加在文档中,如有侵犯可以联系本人删除。

参考网址:https://blog.youkuaiyun.com/caijing3210/article/details/6126940
把数据库中的数据导出成xml文件的过程

-- 建表 
 CREATE   TABLE  PEOPLE
 (
    PERSONID  VARCHAR2 ( 10 )  PRIMARY   KEY ,
    NAME  VARCHAR2 ( 20 ),
    ADDRESS  VARCHAR2 ( 60 ),
    TEL   VARCHAR2 ( 20 ),
    FAX   VARCHAR2 ( 20 ),
    EMAIL  VARCHAR2 ( 40 )
 );
--存入数据 
 Select * From people;
 Insert Into people Values('2020041301','晓齐','山西','15764430114',' ','550375830@qq.com');
 Insert Into people Values('2020041302','晓鲁','山东','15764430115',' ','550375840@qq.com');

– 将数据库中的数据导出成xml文件的过程

 Create Or Replace Procedure db2xml(xmlfile varchar2 ) as 
   doc xmldom.DOMDocument;
   ret xmldom.DOMNode;
   peoplenode xmldom.DOMNode;
    -- 遍历整个people表的游标  
    Cursor cur_people is select * from people;
    -- 将people表中一行记录转换为元素 
    -- 并插入到DOM文档对像根结点PEOPLE下的过程  
    procedure  addperson(doc xmldom.DOMDocument,people xmldom.DOMNode,
                       v_pid  varchar2 ,v_name  varchar2 ,v_addr  varchar2 ,
                       v_tel  varchar2 ,v_fax  varchar2 ,v_email  varchar2 )
    is 
     personelem xmldom.DOMElement;
     personnode xmldom.DOMNode;
     itemelem xmldom.DOMElement;
     itemnode xmldom.DOMNode;
      text  xmldom.DOMText;
    begin 
      -- 创建PERSON结点  
     personelem:=xmldom.createElement(doc, ' PERSON ' );
      -- 设置PERSONID属性  
     xmldom.setAttribute(personelem, ' PERSONID ' ,v_pid);
     personnode:=xmldom.appendChild(peoplenode,xmldom.makeNode(personelem));
      -- 向PERSON结点中添加NAME元素 
     itemelem:=xmldom.createElement(doc, ' NAME ' );
      --   将NAME结点添加到PERSON结点中 
     itemnode:=xmldom.appendChild(personnode,xmldom.makeNode(itemelem));
      --   创建文本结点 
      text:=xmldom.createTextNode(doc,v_name);
      --   将文本结点添加到NAME结点下,以构成完整NAME元素 
     itemnode:=xmldom.appendChild(itemnode,xmldom.makeNode( text ));
      -- 向PERSON结点中添加ADDRESS元素 
     itemelem:=xmldom.createElement(doc, ' ADDRESS ' );
     itemnode:=xmldom.appendChild(personnode,xmldom.makeNode(itemelem));
      text:=xmldom.createTextNode(doc,v_addr);
     itemnode:=xmldom.appendChild(itemnode,xmldom.makeNode( text ));
      -- 向PERSON结点中添加TEL元素 
     itemelem:=xmldom.createElement(doc, ' TEL ' );
     itemnode:=xmldom.appendChild(personnode,xmldom.makeNode(itemelem));
      text:=xmldom.createTextNode(doc,v_tel);
     itemnode:=xmldom.appendChild(itemnode,xmldom.makeNode( text ));
      -- 向PERSON结点中添加FAX元素 
     itemelem:=xmldom.createElement(doc, ' FAX ' );
     itemnode:=xmldom.appendChild(personnode,xmldom.makeNode(itemelem));
      text:=xmldom.createTextNode(doc,v_fax);
     itemnode:=xmldom.appendChild(itemnode,xmldom.makeNode( text ));
      -- 向PERSON结点中添加EMAIL元素 
     itemelem:=xmldom.createElement(doc, ' EMAIL ' );
     itemnode:=xmldom.appendChild(personnode,xmldom.makeNode(itemelem));
      text:=xmldom.createTextNode(doc,v_email);
     itemnode:=xmldom.appendChild(itemnode,xmldom.makeNode( text ));
    end  addperson;
 begin 
    -- 创建一个新DOM文档对像  
   doc:=xmldom.newDOMDocument;
    -- 为文档添加根结点PEOPLE 
   peoplenode:=xmldom.makeNode(xmldom.createElement(doc, ' PEOPLE ' ));
   ret:=xmldom.appendChild(xmldom.makeNode(doc),peoplenode);
    -- 使用游标遍历people中的每行,生成每一行对应的PERSON元素并添加到PEOPLE根结点中 
    For v_row In cur_people loop
     addperson(doc,peoplenode,v_row.personid,v_row.name,v_row.address,v_row.tel,v_row.fax,v_row.email);
    End loop;
    -- 将结果写入指定文件  
   xmldom.writeToFile(doc,xmlfile);
   xmldom.freeDocument(doc);
 end  db2xml;

–调用此过程的格式:

Begin
db2xml('DUMP_DIR'||'\abc.xml');
End;

(说明:DUMP_DIR为通过语句:create or replace directory创建的一个文件目录)
执行结果显示:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值