2021-04-26 oracle 导入xml文件过程

 CREATE OR REPLACE PROCEDURE addPerson(file_path VARCHAR2,log_path VARCHAR2) 
 AS 
 --//XML解析器 
 xmlPar XMLPARSER.parser := XMLPARSER.NEWPARSER; 
 --//DOM文档对象 
 doc xmldom.DOMDocument; 
 len integer; 
 personNodes xmldom.DOMNodeList; 
 chilNodes xmldom.DOMNodeList; 
 tempNode xmldom.DOMNode; 
 tempArrMap xmldom.DOMNamedNodeMap; 
 --================================ 
 --以下变量用于获取XML节点的值 
 pid varchar2(4); 
 name varchar2(50); 
 address varchar2(200); 
 tel varchar2(20); 
 fax varchar2(20); 
 email varchar(100); 
 tmp integer; 
 --================================ 
 BEGIN 
   xmlPar := xmlparser.newParser; 
   xmlparser.setErrorLog( xmlPar, log_path); 
   xmlparser.parse(xmlPar, file_path); 
   doc := xmlparser.getDocument( xmlPar );  
   -- 释放解析器实例 
   xmlparser.freeParser(xmlPar); 
   -- 获取所有PERSON元素 
   personNodes := xmldom.getElementsByTagName( doc, 'PERSON' ); 
   len := xmldom.getLength( personNodes ); 
   --遍历所有PERSON元素 
   FOR i in 0..len-1 
   LOOP 
     --获取第i个PERSON 
     tempNode := xmldom.item( personNodes, i ); 
     --所有属性 
     tempArrMap := xmldom.getAttributes(tempNode); 
     --获取PERSONID的值 
     pid := xmldom.getNodeValue(xmldom.getNamedItem(tempArrMap,'PERSONID')); 
     --获取所有子节点
     chilNodes := xmldom.getChildNodes(tempNode);
     --获取子节点的个数 
     tmp := xmldom.GETLENGTH( chilNodes ); 
     --获取各个子节点的值
     name := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item( chilNodes, 0 ))); 
     address := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item( chilNodes, 1 ))); 
     tel := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item( chilNodes, 2 ))); 
     fax := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item( chilNodes, 3 ))); 
     email := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item( chilNodes, 4 ))); 
     --插入数据 
     INSERT INTO PEOPLE VALUES (pid,name,address,tel,fax,email); 
     COMMIT; 
   END LOOP; 
   -- 释放文档对象 
   xmldom.freeDocument(doc); 
   EXCEPTION 
    WHEN OTHERS THEN 
      DBMS_output.PUT_LINE(SQLERRM); 
 END addPerson; 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值