`
lxy2330
  • 浏览: 469233 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Oracle存储过程解析XML,并把数据持久化

阅读更多

 

需要解析的xml文件:people.xml
1 <?xml version="1.0"?>
2 <PEOPLE>
3     <PERSON PERSONID="E01">
4         <NAME>Tony Blair</NAME>
5         <ADDRESS>10 Downing Street, London, UK</ADDRESS>
6         <TEL>(061) 98765</TEL>
7         <FAX>(061) 98768</FAX>
8         <EMAIL>blair@everywhere.com</EMAIL>
9     </PERSON>
10     <PERSON PERSONID="E02">
11         <NAME>Bill Clinton</NAME>
12         <ADDRESS>White House, USA</ADDRESS>
13         <TEL>(001) 6400 98765</TEL>
14         <FAX>(001) 6400 98769</FAX>
15         <EMAIL>bill@everywhere.com</EMAIL>
16     </PERSON>
17     <PERSON PERSONID="E03">
18         <NAME>Tom Cruise</NAME>
19         <ADDRESS>57 Jumbo Street, New York, USA</ADDRESS>
20         <TEL>(001) 4500 67859</TEL>
21         <FAX>(001) 4500 67895</FAX>
22         <EMAIL>cruise@everywhere.com</EMAIL>
23     </PERSON>
24     <PERSON PERSONID="E04">
25         <NAME>Linda Goodman</NAME>
26         <ADDRESS>78 Crax Lane, London, UK</ADDRESS>
27         <TEL>(061) 54 56789</TEL>
28         <FAX>(061) 54 56772</FAX>
29         <EMAIL>linda@everywhere.com</EMAIL>
30     </PERSON>
31 </PEOPLE>

我以scott用户为例,新建表:
1 CREATE TABLE PEOPLE
2 (
3   PERSONID VARCHAR2(4) PRIMARY KEY,
4   NAME VARCHAR2(50),
5   ADDRESS VARCHAR2(200),
6   TEL VARCHAR2(20),
7   FAX VARCHAR2(20),
8   EMAIL VARCHAR2(100)
9 );

解析并持久化的存储过程代码:
1 /**
2 *file_path     需要解析的XML文件路径 如:D:\OracleTest\people.xml
3 *log_path      保存日志的文件的路径  如: D:\OracleTest\xmllog.txt
4 **/
5
6 CREATE OR REPLACE PROCEDURE addPerson(file_path VARCHAR2,log_path VARCHAR2)
7 AS
8 --//XML解析器
9 xmlPar XMLPARSER.parser := XMLPARSER.NEWPARSER;
10 --//DOM文档对象
11 doc xmldom.DOMDocument;
12 len integer;
13 personNodes xmldom.DOMNodeList;
14 chilNodes xmldom.DOMNodeList;
15 tempNode xmldom.DOMNode;
16 tempArrMap xmldom.DOMNamedNodeMap;
17 --================================
18 --以下变量用于获取XML节点的值
19 pid varchar2(4);
20 name varchar2(50);
21 address varchar2(200);
22 tel varchar2(20);
23 fax varchar2(20);
24 email varchar(100);
25 tmp integer;
26 --================================
27 BEGIN
28   xmlPar := xmlparser.newParser;
29   xmlparser.setErrorLog( xmlPar, log_path);
30   xmlparser.parse(xmlPar, file_path);
31   doc := xmlparser.getDocument( xmlPar ); 
32   -- 释放解析器实例
33   xmlparser.freeParser(xmlPar);
34   -- 获取所有PERSON元素
35   personNodes := xmldom.getElementsByTagName( doc, 'PERSON' );
36   len := xmldom.getLength( personNodes );
37   --遍历所有PERSON元素
38   FOR i in 0..len-1
39   LOOP
40     --获取第i个PERSON
41     tempNode := xmldom.item( personNodes, i );
42     --所有属性
43     tempArrMap := xmldom.getAttributes(tempNode);
44     --获取PERSONID的值
45     pid := xmldom.getNodeValue(xmldom.getNamedItem(tempArrMap,'PERSONID'));
46     --获取子元素的值
47     chilNodes := xmldom.getChildNodes(tempNode);
48     tmp := xmldom.GETLENGTH( chilNodes );
49     name := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item( chilNodes, 0 )));
50     address := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item( chilNodes, 1 )));
51     tel := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item( chilNodes, 2 )));
52     fax := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item( chilNodes, 3 )));
53     email := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item( chilNodes, 4 )));
54     --插入数据
55     INSERT INTO PEOPLE VALUES (pid,name,address,tel,fax,email);
56     COMMIT;
57   END LOOP;
58   -- 释放文档对象
59   xmldom.freeDocument(doc);
60   EXCEPTION
61    WHEN OTHERS THEN
62      DBMS_output.PUT_LINE(SQLERRM);
63 END addPerson;


有许多朋友都说执行时出现错误,现在我把我在Oracle9i使用的截图贴出来,以作参考:

分享到:
评论

相关推荐

    ibatis调用oracle存储过程

    Oracle存储过程是在数据库中编译并存储的一组SQL语句和过程化控制流语句的集合,它们可以接受输入参数,输出参数,甚至返回多个结果集。在本例中,我们创建了两个存储过程:`GetSingleEmpRS` 和 `GetDoubleEmpRS`,...

    java核心技术 oracle数据库 xml

    综上所述,Java核心技术、Oracle数据库和XML共同构建了现代软件开发的基础,它们之间的结合能够实现复杂的数据处理、持久化存储以及高效的数据交换,对于理解和掌握这些知识,对于任何IT专业人士来说都是至关重要的...

    JSP解析xml成绩管理系统

    对于大量数据的操作,可以考虑使用存储过程、批量插入等方式提高性能,并合理设计数据库索引来加速查询。 以上就是JSP解析XML成绩管理系统的核心知识点,涵盖了XML数据结构、JSP与数据库交互、用户界面设计、权限...

    java数据库设计持久化操作实现

    在Java编程领域,数据库设计和持久化操作是核心部分,它们确保了应用程序的数据存储和检索。持久化是指将数据保存到非易失性存储(如硬盘)中,以便即使在程序关闭后也能再次访问。本篇文章将深入探讨如何通过IO...

    xml的几种方式的操作集锦大全

    这在跨平台数据交换和持久化对象时非常有用。例如,Java的JAXB库提供了自动XML序列化和反序列化的能力。 七、XML在网络通信中的应用 XML常用于Web服务(如SOAP),作为数据交换格式。XML请求和响应包含在HTTP报文中...

    asp.net 数据库连接到xml

    如果需要将XML数据持久化,可以使用`XmlTextWriter`将XML写入文件,或者使用.NET Framework提供的XML序列化技术将对象转换为XML并保存。 5. **性能优化**:为了提高性能,可以使用数据适配器(如`SqlDataAdapter`)...

    odbc例子程序,支持unicode,xml方式调用

    在这个例子中,TinyXML库被用来解析和持久化XML数据。TinyXML是一个轻量级的C++库,它能够方便地读写XML文档。通过XML接口,用户可以以XML文件的形式导入或导出数据,这对于数据的调试和跨平台传递非常有用。 具体...

    javabean 转换 xml映射文件工具

    这个工具在处理数据交换、持久化或配置文件时非常有用,特别是在使用像Castor这样的框架时。Castor是一个强大的对象关系映射(ORM)和数据绑定框架,它可以将Java对象与数据库记录或XML文档之间建立映射关系。 ...

    oracle的hibernate配置文件

    持久化类的映射信息通常存储在`.hbm.xml`文件中。在配置文件中,我们需要引用这些映射文件: ```xml &lt;mapping resource="com/example/Entity1.hbm.xml"/&gt; &lt;mapping resource="com/example/Entity2.hbm.xml"/&gt; `...

    springMVC+MyBatis+Oracle+Web实现增删改查完整案例+数据库数据)

    MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的...

    jsp/servlet投票管理系统myeclipse 8.6.1+tomcat7.0.11+xml(dom4j解析)

    通过DOM4J,我们可以方便地解析XML文件,获取投票数据,并将其展示在用户界面上,或者将用户投票结果持久化到XML文件中。 5. 投票管理系统的实现: 系统的核心功能包括投票创建、显示投票列表、用户投票以及结果...

    Oracle工程师培训教程2

    至于“hibernate”,这是一个Java持久化框架,它简化了与关系数据库(如Oracle)的交互。学习者可以了解如何配置Hibernate,使其与Oracle数据库配合工作,实现对象关系映射(ORM),提高开发效率。 总的来说,...

    Java程序设计 EJB、XML与数据库

    主要的EJB类型有会话Bean(Session Beans)处理客户端交互,实体Bean(Entity Beans)代表持久化数据,以及消息驱动Bean(Message-Driven Beans)处理JMS消息。EJB容器管理了组件的生命周期、事务、安全性、并发控制...

    ado.net+ajax+html+css+jquery+oracle+xml+sqlserver参考手册

    它由Dataset、DataAdapter、Connection、Command、DataReader等组件构成,实现了离线数据处理和数据持久化。 2. AJAX(Asynchronous JavaScript and XML):AJAX不是一种单一的技术,而是一种利用JavaScript进行...

    ssh上传下载文件到oracle

    开发者需要配置一个`CommonsMultipartResolver`解析器来启用文件上传功能,并在控制器层处理`MultipartFile`对象,将文件内容存储到Oracle数据库中。 其次,**Struts2**是一个基于MVC设计模式的Action驱动的Web框架...

    SSH Oracle 框架

    3. **Hibernate框架**:Hibernate是持久化层的解决方案,作为对象关系映射(Object-Relational Mapping, ORM)工具,它简化了Java应用程序对数据库的操作。Hibernate通过XML或注解定义对象与数据库表的映射关系,...

    Java程序设计EJB、XML与数据库

    EJB有三种主要类型:会话bean(Session Beans)处理客户端请求,实体bean(Entity Beans)代表持久化的业务对象,消息驱动bean(Message-Driven Beans)处理JMS(Java Message Service)消息。EJB框架处理了诸如事务...

    http接口返回json,springmvc+mybatis+oracle

    MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。在本项目中,`TestWebInterface`可能包含MyBatis的Mapper接口和XML配置...

    ssm框架+oracle

    在这个项目中,Oracle作为数据源,存储和管理应用程序的数据。 **配置信息**:项目的配置文件通常包括Spring的bean配置(如`applicationContext.xml`)、SpringMVC的配置(如`servlet-context.xml`)、MyBatis的...

    myibatis 生成oracle 对应映射文件

    MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射,而Oracle则是一款广泛使用的高性能关系型数据库系统。本文将详细讲解如何利用MyBatis Generator工具生成Oracle数据库对应的映射文件。 ...

Global site tag (gtag.js) - Google Analytics