活动介绍

从Oracle数据访问和格式化XML

立即解锁
发布时间: 2025-08-17 01:24:05 阅读量: 5 订阅数: 18
PDF

XML编程宝典:从基础到实践的全面指南

### 从 Oracle 数据访问和格式化 XML 在处理 Oracle 数据时,XML 是一种强大的数据交换和存储格式。本文将详细介绍如何从 Oracle 数据中访问和格式化 XML,包括处理多行数据、使用 XMLTYPE 数据类型、从 XML 文档创建关系数据等内容。 #### 1. 使用 XML DB 处理多行数据 在之前,我们已经了解了如何使用 `XMLFOREST()`、`SYS_XMLAGG()`、`XMLELEMENT()` 和 `XMLATTRIBUTES()` 函数处理单行数据。但处理多行结果集时,会面临一些挑战,因为每一行都需要在 XML 文档中进行定义,并且大多数情况下,XML 文档必须格式良好。 例如,若在之前的 `SYS_XMLAGG()` 示例中包含多行数据,所有元素都会处于同一嵌套级别,导致 XML 文档中无法清晰定义行结果的起始和结束,数据混乱。而之前的 `XMLELEMENT()` 和 `XMLATTRIBUTES()` 示例为每行返回一个带有 `RootElement` 的 XML 文档片段,但缺少 XML 文档根元素。 #### 2. 使用 XMLAGG() 聚合多行数据 `XMLAGG()` 函数可将多行数据聚合为单个 XML 文档。以下是具体示例: ```sql SELECT XMLELEMENT("RowElement", XMLFOREST( PRODUCTID, RANKING, TITLE)) as "RESULT" FROM AmazonListings ``` 此查询使用嵌套的 `XMLELEMENT()` 和 `XMLFOREST()` 函数为每行数据创建格式良好的 XML 文档片段,结果并非格式良好的 XML 文档,而是每行数据的文档片段集合: ```xml <RowElement> <PRODUCTID>1001</PRODUCTID> <RANKING>1</RANKING> <TITLE>Hamlet/MacBeth</TITLE> </RowElement> <RowElement> <PRODUCTID>1002</PRODUCTID> <RANKING>2</RANKING> <TITLE>MacBeth</TITLE> </RowElement> <RowElement> <PRODUCTID>1003</PRODUCTID> <RANKING>3</RANKING> <TITLE>William Shakespeare: MacBeth</TITLE> </RowElement> ``` 若要将多行结果聚合为单个 XML 文档,可使用如下查询: ```sql SELECT XMLELEMENT("RootElement", XMLAGG(XMLELEMENT("RowElement", XMLFOREST( PRODUCTID, RANKING, TITLE)))) as "RESULT" FROM AmazonListings ``` 结果是一个格式良好的 XML 文档,包含根元素和每行数据的定义,数据行是 `RowElement` 元素的子元素: ```xml <RootElement> <RowElement> <PRODUCTID>1001</PRODUCTID> <RANKING>1</RANKING> <TITLE>Hamlet/MacBeth</TITLE> </RowElement> <RowElement> <PRODUCTID>1002</PRODUCTID> <RANKING>2</RANKING> <TITLE>MacBeth</TITLE> </RowElement> <RowElement> <PRODUCTID>1003</PRODUCTID> <RANKING>3</RANKING> <TITLE>William Shakespeare: MacBeth</TITLE> </RowElement> </RootElement> ``` `XMLAGG()`、`XMLELEMENT()`、`XMLATTRIBUTES()`、`XMLFOREST()` 和 `XMLCOMMATTVAL()` 的组合是将 Oracle 关系数据表示为 XML 的最常用方法。 #### 3. 使用 XMLTYPE 数据类型 从 Oracle9i 开始,可使用 `XMLType` 数据类型在 Oracle 数据库中存储 XML 数据。在 Oracle9i 之前,使用 LOB 和文本将 XML 文档作为文本存储。从基础层面看,CLOB 和 XMLType 数据差异不大,但 `XMLType` API 中有一些有用的方法,可用于操作存储为 `XMLType` 数据类型的 XML 文档。 当通过 W3C 模式将关系数据表映射到 XML 文档数据时,表中的数据将以 `XMLType` 数据类型形式可用。常规表中的列也可以是 `XMLType` 数据类型,并且可以使用 `XMLType` 视图将关系数据伪装为 `XMLType` 数据。 ##### 3.1 将数据存入 XMLType 列 在 Oracle9i 及更高版本中,可向任何 Oracle 表添加 `XMLType` 列。以下示例创建了一个名为 `XMLONLY` 的表,该表包含一个名为 `XMLDOC` 的列,并将其数据类型指定为 `XMLTYPE`: ```sql CREATE TABLE XMLONLY (XMLDOC SYS.XMLTYPE); ``` 有了新的 `XMLONLY` 表后,可从任何源插入 `XMLType` 数据。以下示例使用嵌套的 `XMLELEMENT()` 和 `XMLFOREST()` 函数选择 `AMAZONLISTINGS` 表的前三列,将查询结果插入一个名为 `XMLTypeVal` 的变量(内存中的 `XMLType` 对象),然后将该 `XMLType` 对象插入 `XMLONLY` 表的 `XMLDOC` 列。 需要注意的是,`XMLType` 数据类型列仅接受格式良好的 XML 文档,不接受文档片段。例如,若尝试插入由 `XMLFOREST` 表达式产生的 XML 文档片段,Oracle 将返回 `ORA - 19010: Cannot insert XML fragments` 错误消息。添加 `XMLELEMENT()` 函数可在 `XMLFOREST` 结果周围包裹根元素,使插入操作能够被接受。 ```sql DECLARE XMLTYpeVal SYS.XMLTYPE; BEGIN SELECT XMLELEMENT("RootElement", XMLFOREST( PRODUCTID, RANKING, TITLE)) as "result" INTO XMLTYpeVal FROM AmazonListings WHERE rownum = 1; INSERT INTO XMLONLY (XMLDOC) VALUES (XMLTYpeVal); COMMIT; END; ``` ##### 3.2 使用 SQL 和 SYS_XMLGEN 处理 XMLType 列 在 `XMLONLY` 表的 `XMLDOC` 列中存储了 `XMLType` 数据后,可使用常规 SQL 函数提取数据。例如,以下简单查询将返回存储在 `XMLDOC` 中的 XML 文档: ```sql SELECT XMLDOC from XMLONLY ``` 查询结果如下: ```xml <RootElement> <PRODUCTID>1001</PRODUCTID> <RANKING>1</RANKING> <TITLE>Hamlet/MacBeth</TITLE> </RootElement> ``` `SYS_XMLGEN()` 是一个 Oracle SQL 函数,可将表的单个列作为 XML 元素返回,元素名称基于列名。该函数在处理常规数据时使用场景有限,但对 `XMLType` 列非常有用。 以下是 `SYS_XMLGEN()` 从常规表数据返回 XML 元素的示例: ```sql SELECT SYS_XMLGEN(PRODUCTID) from AMAZONLISTINGS where rownum=1 ``` 查询结果为: ```xml <PRODUCTID>1001</PRODUCTID> ``` 当对 `XMLType` 列应用相同查询时,也非常有用。以下示例查询 `XMLONLY` 表的 `XMLDOC` 列并返回单个 XML 文档: ```sql SELECT SYS_XMLGEN(XMLDOC) from XMLONLY where rownum=1 ``` `SYS_XMLGEN()` 将列名作为元素名包裹在结果周围: ```xml <XMLDOC> <RootElement> <PRODUCTID>1001</PRODUCTID> <RANKING>1</RANKING> <TITLE>Hamlet/MacBeth</TITLE> </RootElement> </XMLDOC> ``` 需要注意的是,XML 文档顶部没有 XML 文档声明,这是有意为之。因为 XML 声明是可选的,创建格式良好的 XML 文档结构仅需要根元素。不存储可选声明而在查询时创建声明更好,因为没有声明的 XML 文档可以合并成更大的 XML 文档。若将 XML 声明作为数据的一部分存储,会占用更多空间,并且更难将 XML 结果聚合为更大的文档。以下示例在之前示例的 `SYS_XMLGEN()` 结果前添加 XML 文档声明: ```sql SELECT '<?xml version="1.0"?>', SYS_XMLGEN(XMLDOC) from XMLONLY ``` 添加 XML 文档声明后的结果如下: ```xml <?xml version="1.0"?> <XMLDOC> <RootElement> <PRODUCTID>1001</PRODUCTID> <RANKING>1</RANKING> <TITLE>Hamlet/MacBeth</TITLE> </RootElement> </XMLDOC> ``` #### 4. 从 XML 文档创建关系数据 Oracle 企业管理器具备注册生成的模式并将 XML 文档数据映射到关系数据的功能。`XMLType` 视图也可用于将 XML 文档数据映射到关系数据,并作为遗留数据结构的 XML 接口,而无需更改表本身。 ##### 4.1 从 Oracle 数据库模式生成 W3C 模式 Oracle 可使用 XDK 函数、PL/SQL `DBMS_XMLSCHEMA.generateSchema()` 包或第三方工具(如 XMLSpy)从关系数据生成 W3C 模式。以下是使用 XMLSpy 为 `AMAZONLISTINGS` 表生成的 W3C 模式示例: ```xml <?xml version="1.0" encoding="UTF-8"?> <!-- edited with XMLSPY v5 rel. 4 U (http://www.xmlspy.com) by Brian Benz (Wiley) --> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="AMAZONLISTINGS"> <xs:complexType> <xs:sequence> <xs:element name="PRODUCTID" type="xs:decimal"/> <xs:element nam ```
corwn 最低0.47元/天 解锁专栏
赠100次下载
继续阅读 点击查看下一篇
profit 400次 会员资源下载次数
profit 300万+ 优质博客文章
profit 1000万+ 优质下载资源
profit 1000万+ 优质文库回答
复制全文

相关推荐

张诚01

知名公司技术专家
09级浙大计算机硕士,曾在多个知名公司担任技术专家和团队领导,有超过10年的前端和移动开发经验,主导过多个大型项目的开发和优化,精通React、Vue等主流前端框架。
最低0.47元/天 解锁专栏
赠100次下载
百万级 高质量VIP文章无限畅学
千万级 优质资源任意下载
千万级 优质文库回答免费看
立即解锁

专栏目录

最新推荐

BLE广播机制深度解析:XN297_TO_BLE.zip中的创新实践与应用指南

![BLE广播机制深度解析:XN297_TO_BLE.zip中的创新实践与应用指南](https://www.beaconzone.co.uk/blog/wp-content/uploads/2021/10/beaconprotocols-1024x385.png) # 摘要 本文全面分析了蓝牙低功耗(BLE)广播机制的理论与实践应用,特别关注了XN297_TO_BLE.zip的开发与优化。通过详细探讨BLE广播的工作原理、数据包结构、以及XN297_TO_BLE.zip的设计理念与架构,本文为开发者提供了深入了解和实践BLE技术的框架。文中不仅介绍了如何搭建开发环境和编程实践,还深入讨论了

设计高效电机:铁磁材料损耗控制的艺术与科学

![铁磁材料](https://i0.hdslb.com/bfs/archive/4ad6a00cf2a67aa80ecb5d2ddf2cb4c2938abbbf.jpg@960w_540h_1c.webp) # 摘要 本论文探讨了铁磁材料在电机效率中的作用及其损耗的理论基础,深入分析了磁滞损耗和涡流损耗的原理,并建立损耗与电机性能之间的数学模型。通过材料属性和制造工艺的选择与改进,提出了减少损耗的实践策略,以及如何在现代电机设计中实施高效的损耗控制。本研究还展望了铁磁材料损耗控制的未来研究方向,包括新型材料技术的发展和智能制造在环境可持续性方面的应用。 # 关键字 铁磁材料;电机效率;磁

分布式系统中的网络负载监测技术解析

### 分布式系统中的网络负载监测技术解析 #### 1. 引言 在实时分布式系统里,监测网络性能至关重要。若系统具备适应性或动态性,资源管理器就能借助这些信息来创建或启用新进程。我们通常关注两个方面:一是主机对网络施加的负载量,二是网络负载指数。本文提出了一种评估网络当前负载的简单技术。若计算机连接多个网络,我们可以获取该主机在每个网络上的负载指数,也能测量所有主机对网络施加的总负载指数。DeSiDeRaTa的动态资源管理器可运用此技术来达成其需求,并且该技术已通过LoadSim和DynBench两个基准测试进行了验证。 DeSiDeRaTa项目提供了创新的资源管理技术,它将分布式实时计

Android开发:原生音频播放、性能分析与优化

### Android 开发:原生音频播放、性能分析与优化 #### 1. 原生音频播放:OpenSL ES 与 WAVE 播放器 OpenSL ES 是 Android 平台为原生代码提供的原生声音 API。借助该 API,原生代码能够在无需与 Java 层通信的情况下播放和录制音频,这极大地提升了多媒体应用的性能。 ##### 1.1 运行 WAVE 音频播放器 若要使用基于 OpenSL ES 的 WAVE 播放器,可按以下步骤操作: 1. **下载音频文件**:在运行应用前,需准备一个示例 WAVE 音频文件。通过网页浏览器,从 [www.nch.com.au/acm/8k16bi

【软件测试自动化手册】:提高效率与质量,软件测试的未来趋势

![【软件测试自动化手册】:提高效率与质量,软件测试的未来趋势](https://www.iteratorshq.com/wp-content/uploads/2024/03/cross-platform-development-appium-tool.png) # 摘要 本文旨在全面探讨软件测试自动化的概念、基础理论、实践指南、技术进阶和案例研究,最终展望未来趋势与技能提升路径。首先概述软件测试自动化的重要性及其基本理论,包括自动化测试的定义、类型、适用场景和测试工具的选择。随后,文章提供自动化测试实践的具体指南,涉及测试脚本的设计、持续集成的实现以及测试的维护与优化。进阶章节分析了代码覆

冷却系统设计的未来趋势:方波送风技术与数据中心效率

![fangbosongfeng1_风速udf_udf风_方波送风_](https://www.javelin-tech.com/3d/wp-content/uploads/hvac-tracer-study.jpg) # 摘要 本文综合探讨了冷却系统设计的基本原理及其在数据中心应用中的重要性,并深入分析了方波送风技术的理论基础、应用实践及优势。通过对比传统冷却技术,本文阐释了方波送风技术在提高能效比和增强系统稳定性方面的显著优势,并详细介绍了该技术在设计、部署、监测、维护及性能评估中的具体应用。进一步地,文章讨论了方波送风技术对数据中心冷却效率、运维成本以及可持续发展的影响,提出了优化方案

【云平台上的预算模板使用】:Excel模板与云计算新方法

![【云平台上的预算模板使用】:Excel模板与云计算新方法](https://www.microsoftpressstore.com/content/images/chap3_9781509307708/elementLinks/03fig06_alt.jpg) # 摘要 本文探讨了云平台在现代预算管理中的应用,着重分析了Excel模板在预算编制中的关键作用,以及如何利用云计算技术优化预算模板的创建、存储和协作过程。文章详细介绍了Excel模板的基本功能和高级设计技巧,并讨论了在云平台上集成预算模板的优势。通过实践案例分析,本文提供了云平台预算模板部署的关键步骤和常见问题的解决策略,最终展

声纹识别故障诊断手册:IDMT-ISA-ELECTRIC-ENGINE数据集的问题分析与解决

![声纹识别故障诊断手册:IDMT-ISA-ELECTRIC-ENGINE数据集的问题分析与解决](https://i0.wp.com/syncedreview.com/wp-content/uploads/2020/07/20200713-01al_tcm100-5101770.jpg?fit=971%2C338&ssl=1) # 摘要 声纹识别技术在信息安全和身份验证领域中扮演着越来越重要的角色。本文首先对声纹识别技术进行了概述,然后详细介绍了IDMT-ISA-ELECTRIC-ENGINE数据集的基础信息,包括其构成特点、获取和预处理方法,以及如何验证和评估数据集质量。接着,文章深入探

CListCtrl字体与颜色搭配优化:打造视觉舒适界面技巧

![CListCtrl字体与颜色搭配优化:打造视觉舒适界面技巧](https://anchorpointegraphics.com/wp-content/uploads/2019/02/ColorContrastExamples-02.png) # 摘要 本文深入探讨了CListCtrl控件在Windows应用程序开发中的应用,涵盖了基础使用、字体优化、颜色搭配、视觉舒适性提升以及高级定制与扩展。通过详细分析CListCtrl的字体选择、渲染技术和颜色搭配原则,本文提出了提高用户体验和界面可读性的实践方法。同时,探讨了视觉效果的高级应用,性能优化策略,以及如何通过定制化和第三方库扩展List

【余弦距离与文本相似度】:深度解析情感分析中的关键应用

![Python实现新闻文本类情感分析(采用TF-IDF,余弦距离,情感依存等算法)](https://img-blog.csdnimg.cn/20210316153907487.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpbGRu,size_16,color_FFFFFF,t_70) # 摘要 文本相似度是信息检索、自然语言处理和数据挖掘等领域中的核心问题。余弦距离作为度量文本相似度的重要工具,基于向量空间模型,提供了一种衡