在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;
谢谢解答!
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;
谢谢解答!
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货