从别人那收到一个大约1M的xml文件,在网上模仿了http://www.linuxidc.com/Linux/2013-02/80014.htm的方法,但是在测试的时候,单步运行到xmlparser.parseClob(xmlPar,partPopedom_xml);时候出错
再次选择测试数据时候,发现原来的XML文件被截取了一半,丢失了一半数据。用自己创建的小XML可以正常执行,所以想知道如何解决该问题?只能从外部用java等语言去解决么?oracle;XML
再次选择测试数据时候,发现原来的XML文件被截取了一半,丢失了一半数据。用自己创建的小XML可以正常执行,所以想知道如何解决该问题?只能从外部用java等语言去解决么?oracle;XML
as
------------------=================该存储过程负责存储角色权限================---------------------
--//XML解析器
xmlPar XMLPARSER.parser := XMLPARSER.NEWPARSER; /* AnalyticElongHotelXml analyticElongHotelXml := new AnalyticElongHotelXml(elongHotelsDAO); */
--//DOM文档对象
doc xmldom.DOMDocument;
len Integer;
personNodes xmldom.DOMNodeList;
chilNodes xmldom.DOMNodeList;
tempNode xmldom.DOMNode;
tempArrMap xmldom.DOMNamedNodeMap;
--================================ tmp Integer;
VER VARCHAR2(3);
SRC VARCHAR2(12);
DES VARCHAR2(12);
APP VARCHAR2(80);
MSGNO VARCHAR2(4);
MSGID VARCHAR2(20);
MSGREF VARCHAR2(40);
WORKDATE VARCHAR2(20);
RESERVE VARCHAR2(20);
--================/*partPopedom_xml clob;*/
BEGIN
xmlPar := xmlparser.newParser;
xmlparser.parseClob(xmlPar,partPopedom_xml); --文件较大时候出错
doc := xmlparser.getDocument(xmlPar);
xmlparser.freeParser(xmlPar);
personNodes := xmldom.getElementsByTagName(doc, 'HEAD');
len := xmldom.getLength( personNodes ); --遍历所有HEAD元素
FOR i in 0..len-1
LOOP
--获取第i个
tempNode := xmldom.item(personNodes, i);
--所有属性
tempArrMap := xmldom.getAttributes(tempNode);
--获取PERSONID的值
--pid := xmldom.getNodeValue(xmldom.getNamedItem(tempArrMap,'POPEDOM'));
--获取子元素的值
chilNodes := xmldom.getChildNodes(tempNode);
tmp := xmldom.GETLENGTH(chilNodes);
--提取HEAD中的对应值
VER := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item(chilNodes, 0)));
SRC := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item(chilNodes, 1)));
DES := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item(chilNodes, 2)));
APP := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item(chilNodes, 3)));
MSGNO := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item(chilNodes, 4)));
MSGID := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item(chilNodes, 5)));
MSGREF := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item(chilNodes, 6)));
WORKDATE := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item(chilNodes, 7)));
--RESERVE := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item(chilNodes, 8))); --3 RESERVE若无数据则报错 APPLYDATE
--插入数据
INSERT INTO HEAD VALUES(VER,SRC,DES,APP,MSGNO,MSGID,MSGREF,WORKDATE,RESERVE);
COMMIT;
END LOOP; xmldom.freeDocument(doc);
EXCEPTION
WHEN OTHERS THEN
DBMS_output.ENABLE(SQLERRM);
END P_AddPartPopedom;