将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创建的一个文件目录)
执行结果显示: