`

编写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(4PRIMARY 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专业人士来说都是至关重要的...

    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`)...

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

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

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

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

    ssh上传下载文件到oracle

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

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

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

    Java+XML日程提醒系统.7z

    5. **持久化存储**:除了XML文件外,系统可能还会利用数据库(如MySQL或SQLite)进行更高效的数据存储。 6. **多线程**:为了确保及时发送提醒,系统可能使用多线程技术,一个线程负责监听待提醒事件,另一个线程则...

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

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

    ssm框架+oracle

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

    myibatis 生成oracle 对应映射文件

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

    C#+oracle简单工作流

    9. **持久化**:为了保存工作流实例的状态,C#代码需要与Oracle数据库交互,将工作流实例和元数据持久化存储。这包括使用ORM(Object-Relational Mapping)框架如Entity Framework,简化数据访问。 10. **异常处理...

    XML考试系统_xmlks(毕设 + 课设).zip

    - 数据的持久化可能通过XML文件实现,而非传统的数据库存储。 5. **开发工具和技术**: - 开发者可能使用了Eclipse、IntelliJ IDEA等IDE来编写Java代码,并用Ant或Maven进行构建。 - 可能使用Junit进行单元测试...

    ibatis oracle clob

    CLOB是Oracle数据库用于存储大文本数据(如XML文档、长篇文章等)的数据类型。在iBATIS中,我们需要特别关注如何正确地读取和写入CLOB字段。 首先,iBATIS(现在被称为MyBatis)是一个优秀的持久层框架,它允许...

    maven+spring+springMVC+mybatis+oracle

    在企业级应用中,Oracle通常作为后端数据存储,为SSM应用提供数据支持。 整合这些组件的过程涉及以下步骤: - 配置Maven项目结构,创建pom.xml文件,添加相关依赖。 - 配置Spring的IoC容器,定义Bean并管理它们的...

    maven+spring+mvc+oracle+hibernate 实例

    Maven是一个强大的项目管理和构建工具,它通过使用XML格式的项目对象模型(POM)来管理依赖关系,自动化构建过程,以及执行测试和部署任务。Spring MVC是Spring框架的一部分,用于构建Web应用程序的Model-View-...

    学生登陆系统JSP+XML

    在这个系统中,XML可能被用来持久化存储学生信息,如姓名、学号、级别等。XML的结构清晰,易于解析,适合数据的组织和传输。 3. **用户权限管理**:系统根据用户级别进行权限划分,级别为1的用户被视为管理员,拥有...

Global site tag (gtag.js) - Google Analytics