<?xml version="1.0"?>
<PEOPLE>
<PERSON PERSONID="E01">
<NAME>Tony Blair</NAME>
<ADDRESS>10 Downing Street, London, UK</ADDRESS>
<TEL>(061) 98765</TEL><FAX>(061) 98768</FAX>
<EMAIL>[email protected]</EMAIL>
</PERSON>
<PERSON PERSONID="E02">
<NAME>Bill Clinton</NAME>
<ADDRESS>White House, USA</ADDRESS>
<TEL>(001) 6400 98765</TEL><FAX>(001) 6400 98769</FAX>
<EMAIL>[email protected]</EMAIL>
</PERSON>
<PERSON PERSONID="E03">
<NAME>Tom Cruise</NAME>
<ADDRESS>57 Jumbo Street, New York, USA</ADDRESS>
<TEL>(001) 4500 67859</TEL><FAX>(001) 4500 67895</FAX>
<EMAIL>[email protected]</EMAIL>
</PERSON>
<PERSON PERSONID="E04">
<NAME>Linda Goodman</NAME>
<ADDRESS>78 Crax Lane, London, UK</ADDRESS>
<TEL>(061) 54 56789</TEL><FAX>(061) 54 56772</FAX>
<EMAIL>[email protected]</EMAIL>
</PERSON>
</PEOPLE>于是写出过程如下:
--建表
CREATE TABLE PEOPLE
(
PERSONID VARCHAR2(10) PRIMARY KEY,
NAME VARCHAR2(20),
ADDRESS VARCHAR2(60),
TEL VARCHAR2(20),
FAX VARCHAR2(20),
EMAIL VARCHAR2(40)
);--从xml文件载入数据保存到数据库的过程
create or replace procedure xml2db(xmlfile varchar2) as
p xmlparser.Parser;
doc xmldom.DOMDocument;
n xmldom.DOMNode;
nl xmldom.DOMNodeList;
len 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语句中
isql := isql || xmldom.getNodeValue(xmldom.getFirstChild(n));
isql := isql || '''';
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,'PERSON');
len := xmldom.getLength(nl);
--清空people表的内容
delete from people;
for i in 0..len-1 loop
--取出第i个PERSON元素
n := xmldom.item(nl,i);
--执行插入该PERSON元素所用的SQL语句
execute immediate insertsql(n);
end loop;
commit;
xmldom.freeDocument(doc);
end xml2db;
/此程序能通过编译,,,但却在运行的时候出现以下错误:
ORA-31001: 资源句柄或路径名 "c:/people.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: 在 "SYSTEM.XML2DB", line 40
ORA-06512: 在 line 2
xml文件是放在c盘根目录下的,,,,麻烦大家帮我看看,,,谢谢了,,,小弟是初学者,,望多指教!!!再次谢谢
<PEOPLE>
<PERSON PERSONID="E01">
<NAME>Tony Blair</NAME>
<ADDRESS>10 Downing Street, London, UK</ADDRESS>
<TEL>(061) 98765</TEL><FAX>(061) 98768</FAX>
<EMAIL>[email protected]</EMAIL>
</PERSON>
<PERSON PERSONID="E02">
<NAME>Bill Clinton</NAME>
<ADDRESS>White House, USA</ADDRESS>
<TEL>(001) 6400 98765</TEL><FAX>(001) 6400 98769</FAX>
<EMAIL>[email protected]</EMAIL>
</PERSON>
<PERSON PERSONID="E03">
<NAME>Tom Cruise</NAME>
<ADDRESS>57 Jumbo Street, New York, USA</ADDRESS>
<TEL>(001) 4500 67859</TEL><FAX>(001) 4500 67895</FAX>
<EMAIL>[email protected]</EMAIL>
</PERSON>
<PERSON PERSONID="E04">
<NAME>Linda Goodman</NAME>
<ADDRESS>78 Crax Lane, London, UK</ADDRESS>
<TEL>(061) 54 56789</TEL><FAX>(061) 54 56772</FAX>
<EMAIL>[email protected]</EMAIL>
</PERSON>
</PEOPLE>于是写出过程如下:
--建表
CREATE TABLE PEOPLE
(
PERSONID VARCHAR2(10) PRIMARY KEY,
NAME VARCHAR2(20),
ADDRESS VARCHAR2(60),
TEL VARCHAR2(20),
FAX VARCHAR2(20),
EMAIL VARCHAR2(40)
);--从xml文件载入数据保存到数据库的过程
create or replace procedure xml2db(xmlfile varchar2) as
p xmlparser.Parser;
doc xmldom.DOMDocument;
n xmldom.DOMNode;
nl xmldom.DOMNodeList;
len 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语句中
isql := isql || xmldom.getNodeValue(xmldom.getFirstChild(n));
isql := isql || '''';
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,'PERSON');
len := xmldom.getLength(nl);
--清空people表的内容
delete from people;
for i in 0..len-1 loop
--取出第i个PERSON元素
n := xmldom.item(nl,i);
--执行插入该PERSON元素所用的SQL语句
execute immediate insertsql(n);
end loop;
commit;
xmldom.freeDocument(doc);
end xml2db;
/此程序能通过编译,,,但却在运行的时候出现以下错误:
ORA-31001: 资源句柄或路径名 "c:/people.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: 在 "SYSTEM.XML2DB", line 40
ORA-06512: 在 line 2
xml文件是放在c盘根目录下的,,,,麻烦大家帮我看看,,,谢谢了,,,小弟是初学者,,望多指教!!!再次谢谢
解决方案 »
- 根据条件查询数据,若参数为空的时候应该怎么写?
- ocibindbypos中的参数rcodep到底指什么,查了很多资料还是不理解,求点拨!!
- oracle远程连接----ORA-12560: TNS: 协议适配器错误
- oracle 的查询分析器
- 关于调用函数或过程随机失效的问题
- oracle 数据表分割
- oracle 中 把一个表中的字段更新到另一个表
- 在oracle 中如何查看那些表正在被系统使用???急!!!
- 请教shared pool暴涨的原因
- 郁闷 安装oacle 9.1.0 一个月没安装上,请那位高手帮我看一下,给我一个经过测试的安装过程。非常感谢!!!
- 奇怪的现象。。。oracle难道是全手动档数据库?
- 为什么我在安装完oracle 10g 后能用pl/sql连接orcale,重启电脑后就不行了?
ORA-31001: 资源句柄或路径名 "c:/people.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: 在 "SYSTEM.XML2DB", line 40
ORA-06512: 在 line 2
目录已创建。SQL> grant read, write on directory log_dir to test1;
授权成功。用这样的方式来调用
file:=utl_file.fopen('LOG_DIR','log.txt','w');