oracle导出数据

 
/**
*sqlStr        附加的查询条件 如:where PERSONID = 'E01',查询所有输入''
*file_path     文件保存路径   如:D:\OracleTest\outpeople.xml
**/
CREATE OR REPLACE PROCEDURE OUTPUTPEOPLE(sqlStr VARCHAR2,file_path VARCHAR2)
AS
      personRow PEOPLE%ROWTYPE;      --获取游标的行变量
      TYPE person_cur IS REF CURSOR; --自定义REF游标
      cur person_cur;   
     tempSql varchar2(500) := 'SELECT * FROM PEOPLE ';       --初始的查询语句
     doc xmlDom.DOMDocument := xmldom.newDOMDocument;        -- 创建文档对象
     main_node xmlDom.DOMNode := xmldom.makeNode(doc);       -- 获得文档节点
     root_elmt xmlDom.DOMElement:= xmldom.createElement(doc, 'PEOPLE');   -- 创建根元素
     --==================================================
     --以下定义元素
     person_elmt xmlDom.DOMElement;      --定义PERSON元素
     name_elmt xmlDom.DOMElement;      --定义NAME元素
     address_elmt xmlDom.DOMElement;      --定义ADDRESS元素
     tel_elmt xmlDom.DOMElement;           --定义TEL元素   
     email_elmt xmlDom.DOMElement;      --定义EMAIL元素   
     --==================================================
     --以下定义节点
     root_node xmlDom.DOMNode;   --定义PEOPLE节点
     person_node xmlDom.DOMNode;   --定义PERSON节点
     name_node xmlDom.DOMNode;   --定义NAME节点
     address_node xmlDom.DOMNode;   --定义ADDRESS节点
     tel_node xmlDom.DOMNode;   --定义TEL节点
     email_node xmlDom.DOMNode;   --定义EMAIL节点
     temp_node xmlDom.DOMNode;
BEGIN
     -- 向文档节点加入根节点:<PEOPLE></PEOPLE>
     root_node := xmldom.appendChild(main_node, xmldom.makeNode(root_elmt));
     --附加查询条件
     tempSql := tempSql||sqlStr;
     --打开游标
     OPEN cur FOR tempSql;
     --遍历游标
     LOOP
       FETCH cur INTO personRow;
       EXIT WHEN cur%NOTFOUND;
       --===========================================================================--
       person_elmt := xmldom.createElement(doc, 'PERSON'); --创建PERSON元素
       -- 向PEOPLE节点加入PERSON节点<PERSON></PERSON>
       person_node := xmldom.appendChild(root_node, xmldom.makeNode(person_elmt));
       --===========================================================================--
       --向PERSON节点加入属性PERSONID
       xmlDom.SETATTRIBUTE( person_elmt, 'PERSONID', personRow.personId );
       --===========================================================================--
       name_elmt := xmldom.createElement(doc, 'NAME');      --创建NAME元素
       --向PERSON节点加入子节点NAME
       name_node := xmldom.appendChild(person_node,xmlDom.makeNode(name_elmt));
       --向NAME节点加入文本
       temp_node := xmldom.appendChild(name_node , xmlDom.makeNode(xmldom.createTextNode(doc,personRow.name)));
       --===========================================================================--
       address_elmt := xmldom.createElement(doc, 'ADDRESS');      --创建ADDRESS元素
       --向PERSON节点加入子节点ADDRESS
       address_node := xmldom.appendChild(person_node,xmlDom.makeNode(address_elmt));
       --向ADDRESS节点加入文本
       temp_node := xmldom.appendChild(address_node, xmlDom.makeNode(xmldom.createTextNode(doc,personRow.address)));
       --===========================================================================--
       tel_elmt := xmldom.createElement(doc, 'TEL');      --创建TEL元素   
       --向TEL节点加入子节点NAME
       tel_node := xmldom.appendChild(person_node,xmlDom.makeNode(tel_elmt));
       --向TEL节点加入文本
       temp_node := xmldom.appendChild(tel_node, xmlDom.makeNode(xmldom.createTextNode(doc,personRow.tel)));
       --===========================================================================--
       email_elmt := xmldom.createElement(doc, 'EMAIL');      --创建EMAIL元素   
       --向PERSON节点加入子节点EMAIL
       email_node := xmldom.appendChild(person_node,xmlDom.makeNode(email_elmt));
       --向EMAIL节点加入文本
       temp_node := xmldom.appendChild(email_node, xmlDom.makeNode(xmldom.createTextNode(doc,personRow.email)));
       --===========================================================================--
     END LOOP;
     CLOSE cur;
     --写入硬盘
     xmlDom.writeToFile(doc,file_path,'GBK');
   EXCEPTION
    WHEN OTHERS THEN
      DBMS_output.PUT_LINE(SQLERRM);
END OUTPUTPEOPLE;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值