待解析的XML
<?xml version="1.0"?>
<PEOPLE>
<PERSON PERSONID="E01">
<NAME>Tony Blair </NAME>
<ADDRESS>10 Downing Street, London, UK </ADDRESS>
</PERSON>
</PEOPLE>
存储过程如下
create or replace procedure SP_0001_ParsePERSON2( v_wjm IN varchar2, /*文件名*/
v_log IN varchar2, /*日志文件名*/
PReturnCode OUT varchar2, /*S-成功、E-失败*/
PReturnMsg OUT varchar2 ) As
/******* 定义初始化变量***************/
EXCP_NOFILEDIR exception;
EXCP_NOFILENAME exception;
v_count NUMBER;
xmlPar XMLPARSER.parser := XMLPARSER.NEWPARSER;
doc xmldom.DOMDocument;
len integer;
rootNodes xmldom.DOMNodeList;
chilNodes xmldom.DOMNodeList;
tempNode xmldom.DOMNode;
tempArrMap xmldom.DOMNamedNodeMap; v_FileDir VARCHAR(100); /* 文件路径 */
v_fileName VARCHAR(100); /* 文件路径 */
v_fileLog VARCHAR(100); /* 文件路径 */ 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, v_log);
xmlparser.parse(xmlPar, v_wjm); doc := xmlparser.getDocument(xmlPar);
--释放解析器
xmlparser.freeParser(xmlPar);
--取得根目录
rootNodes := xmldom.getElementsByTagName(doc, 'PERSON');
len := xmldom.getLength(rootNodes);
--遍历根节点
for i in 0 .. len - 1 loop
tempNode := xmldom.item(rootNodes, i);
tempArrMap := xmldom.getAttributes(tempNode);
pid := xmldom.getNodeValue(xmldom.getNamedItem(tempArrMap,'PERSON'));
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)));
INSERT INTO PEOPLE VALUES (pid, name, address);
end loop;
commit;
--释放文档对象
xmldom.freeDocument(doc);
PReturnCode := 'S';
exception
end SP_0001_ParsePERSON;调试到这里时 xmlparser.setErrorLog(xmlPar, 'C:\datafile\xmllog.txt');
报ORA-31020: The operation is not allowed, Reason: Not supported
注释上一句,执行这句时 xmlparser.parse(xmlPar, 'C:\datafile\person.xml');
又报ORA-29280: invalid directory path 不知道是哪里出的问题,用的DBA的权限调试也报错。试了很多次就是不行。。帮忙看下
参考http://www.oracle-base.com/articles/8i/ParseXMLDocuments8i.php说先要安装xdk,我用的是oracle10g的数据库,不知道要不要安装xdk
但是执行到xmlPar := xmlparser.newParser;是没错的
<?xml version="1.0"?>
<PEOPLE>
<PERSON PERSONID="E01">
<NAME>Tony Blair </NAME>
<ADDRESS>10 Downing Street, London, UK </ADDRESS>
</PERSON>
</PEOPLE>
存储过程如下
create or replace procedure SP_0001_ParsePERSON2( v_wjm IN varchar2, /*文件名*/
v_log IN varchar2, /*日志文件名*/
PReturnCode OUT varchar2, /*S-成功、E-失败*/
PReturnMsg OUT varchar2 ) As
/******* 定义初始化变量***************/
EXCP_NOFILEDIR exception;
EXCP_NOFILENAME exception;
v_count NUMBER;
xmlPar XMLPARSER.parser := XMLPARSER.NEWPARSER;
doc xmldom.DOMDocument;
len integer;
rootNodes xmldom.DOMNodeList;
chilNodes xmldom.DOMNodeList;
tempNode xmldom.DOMNode;
tempArrMap xmldom.DOMNamedNodeMap; v_FileDir VARCHAR(100); /* 文件路径 */
v_fileName VARCHAR(100); /* 文件路径 */
v_fileLog VARCHAR(100); /* 文件路径 */ 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, v_log);
xmlparser.parse(xmlPar, v_wjm); doc := xmlparser.getDocument(xmlPar);
--释放解析器
xmlparser.freeParser(xmlPar);
--取得根目录
rootNodes := xmldom.getElementsByTagName(doc, 'PERSON');
len := xmldom.getLength(rootNodes);
--遍历根节点
for i in 0 .. len - 1 loop
tempNode := xmldom.item(rootNodes, i);
tempArrMap := xmldom.getAttributes(tempNode);
pid := xmldom.getNodeValue(xmldom.getNamedItem(tempArrMap,'PERSON'));
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)));
INSERT INTO PEOPLE VALUES (pid, name, address);
end loop;
commit;
--释放文档对象
xmldom.freeDocument(doc);
PReturnCode := 'S';
exception
end SP_0001_ParsePERSON;调试到这里时 xmlparser.setErrorLog(xmlPar, 'C:\datafile\xmllog.txt');
报ORA-31020: The operation is not allowed, Reason: Not supported
注释上一句,执行这句时 xmlparser.parse(xmlPar, 'C:\datafile\person.xml');
又报ORA-29280: invalid directory path 不知道是哪里出的问题,用的DBA的权限调试也报错。试了很多次就是不行。。帮忙看下
参考http://www.oracle-base.com/articles/8i/ParseXMLDocuments8i.php说先要安装xdk,我用的是oracle10g的数据库,不知道要不要安装xdk
但是执行到xmlPar := xmlparser.newParser;是没错的
程序员在深圳QQ群大集 专业分类:
程序员在深圳JAVA群4247660
程序员在深圳c++群15195967
程序员在深圳.NET群Ⅱ:12203296
程序员在深圳TCP/IP协议栈开发:16956462
程序员在深圳JS & AJAX群:12578377
程序员在深圳英语学习群:23864353
深序员在深圳VB:11055959
程序员在深圳c++Ⅱ17409451
程序员在深圳c++群15195967
程序员在深圳嵌入式开发群37489763
程序员在深圳移动开发群31501597
程序员在深圳创业群33653422 不限专业分类:
高级群:17538442
第三群:2650485
第二群:7120862
第五群:29537639
第四群:28702746
第六群:10590618
第七群:10543585
第八群:12006492
第九群:19063074
第十群:2883885
第十一群:25460595
第十二群:9663807 深圳程序员QQ群联盟成立两年多,拥有三十个以上的QQ群,人数达两千多人,有30%以上的成员的经验丰富的老手,包括国内外顶级大公司的成员(如微软、IBM,SUN,华为)、国内著名高校和研究院成员,和有丰富实践经验的高级程序(包括参加过上亿元的项目的架构师),有很热爱技术的成员(包括自己写过嵌入式操作系统),还有少数女程序员。现推介如下QQ群,如有兴趣速速加入:深程高级群:17538442(此群不欢迎新手,已经在深圳工作的,月薪6K以下的不欢迎)c++:15195967 .NET:12203296 mobile:31501597嵌入式:37489763 JAVA:4247660
——————————————————————————————————————————
希望大家不要认为群能给你送来什么,这只是一个平台,让同等水平的程序员有个交流的机会或许能得到一点信息或许能带来一点启发。
有人说常聊QQ的人肯定技术不怎么样,但其实很多技术高朋友不需要做一些简单的重复劳动所以还是有时间聊天的。 *****************************************************************************