-

- 加为好友
- 发送私信
- 在线聊天
|
| 发表于:2008-07-24 11:14:23 楼主 |
在9i环境下,下面得存储过程能够成功将xml文件导入到二维表中,但在10g环境(第二版)下,会出现以下错误: SQL> exec xml2pdm1('d:\s5.xml'); BEGIN xml2pdm1('d:\s5.xml'); END; * 第 1 行出现错误: ORA-31001: 资源句柄或路径名 "d:\s5.xml" 无效 ORA-06512: 在 "SYS.XDBURITYPE", line 11 ORA-06512: 在 "XDB.DBMS_XSLPROCESSOR", line 142 ORA-29280: 目录路径无效 ORA-29280: 目录路径无效 ORA-29280: 目录路径无效 ORA-06512: 在 "XDB.DBMS_XMLPARSER", line 119 ORA-06512: 在 "PDM.XML2PDM1", line 44 ORA-06512: 在 line 1 存储过程代码如下: (xmlfile varchar2) as p xmlparser.Parser; doc xmldom.DOMDocument; n xmldom.DOMNode; nl xmldom.DOMNodeList; len1 number; --根据PERSON结点生成插入SQL语句的过程 function insertsql(node xmldom.DOMNode) return varchar2 is n xmldom.DOMNode; nl xmldom.DOMNodeList; len number; nnm xmldom.DOMNamedNodeMap; isql varchar2(200); begin --取得PERSON结点所有属性 nnm := xmldom.getAttributes(node); isql := 'insert into PEOPLE values('; isql := isql ¦ ¦ ''''; --取得所有属性中的第一个属性,即"PERSONID",并拼接到SQL语句中 isql := isql ¦ ¦ xmldom.getNodeValue(xmldom.item(nnm,0)); isql := isql ¦ ¦ ''''; --取得PERSON结点下的所有结点,准备遍历 nl := xmldom.getChildNodes(node); len := xmldom.getLength(nl); for i in 0..len-1 loop --取出第i个结点 n := xmldom.item(nl,i); isql := isql ¦ ¦ ','; isql := isql ¦ ¦ ''''; --将结点的文本值取出并拼接到SQL语句中 if xmldom.isnull(xmldom.getFirstChild(n))=false then isql := isql ¦ ¦ xmldom.getNodeValue(xmldom.getFirstChild(n)); isql := isql ¦ ¦ ''''; else isql := isql ¦ ¦ ''''; end if; end loop; isql := isql ¦ ¦ ')'; return isql; end insertsql; begin p := xmlparser.newParser; xmlparser.parse(p,xmlfile); --转换xml文件成DOM对像 doc := xmlparser.getDocument(p); xmlparser.freeParser(p); --取出所有PERSON元素 nl := xmldom.getElementsByTagName(doc,'NODE'); len1 := xmldom.getLength(nl); --清空people表的内容 delete from PEOPLE; for i in 0..len1-1 loop --取出第i个PERSON元素 n := xmldom.item(nl,i); --执行插入该PERSON元素所用的SQL语句 execute immediate insertsql(n); commit; end loop; xmldom.freeDocument(doc); end xml2pdm1; 谢谢解答! |
|
|
|
0
修改
删除
举报
引用
回复
| |