XMLTABLE函数是一个SQL表函数,可以通过XQuery表达式从XML输入文档中创建关系数据行。在本文中,我们阐述了如何在SQL插入语句中使用XMLTABLE函数来实现对XML的分割。我们以图11.1中的分割方案为例进行讲解。 第一步是创建关系型目标表(如果他们还不存在的话)。
对于图11.1中的例子,目标表定义如下: CREATE TABLE address(cid INTEGER, name VARCHAR(30), street VARCHAR(40), city VARCHAR(30)) ……
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
XMLTABLE函数是一个SQL表函数,可以通过XQuery表达式从XML输入文档中创建关系数据行。在本文中,我们阐述了如何在SQL插入语句中使用XMLTABLE函数来实现对XML的分割。我们以图11.1中的分割方案为例进行讲解。
第一步是创建关系型目标表(如果他们还不存在的话)。对于图11.1中的例子,目标表定义如下:
CREATE TABLE address(cid INTEGER, name VARCHAR(30), street VARCHAR(40), city VARCHAR(30)) CREATE TABLE phones(cid INTEGER, phonetype VARCHAR(10), phonenum VARCHAR(20)) |
基于目标表的定义,你可以构造分割输入XML文档的插入语句。插入语句必须是“INSERT……INTO……SELECT&……FROM……XMLTABLE”的格式,如图11.2所示。每个XMLTABLE函数包含一个标记为(“?”)的参数,应用程序可以通过该参数传递要分割的XML文档。SQL类型规则要求参数标记必须映射到合适的数据类型上。SELECT从句选择由XMLTABLE函数产生的列,然后分别插入到地址表和电话表中。
图11.2 把XML元素和属性值插入到关系列中。
要按图11.1所示把数据载入这两个目标表,每个插入语句都必须以相同的XML文档输入执行。一种做法是应用程序把两个插入语句放到一个事务里,并给每个语句把同一个XML文档绑定到参数标记(“?”)上。这种方法运行没有问题,但是我们可以进一步优化一下。因为同一个XML文档被从客户端送到服务端两次,在DB2服务器端解析了两次,每句插入语句都会解析一次。这部分浪费的性能可以通过绑定两句插入语句到一个存储过程中来避免。这样,该应用只需要做一次存储过程调用,传递一次输入文档就行了,而不用管存储过程中有几句插入语句。第十八章《在存储过程,用户定义函数(UDF),触发器中使用XML》讲述了这样一个存储过程,以及其他在存储过程和自定义函数中操作XML数据的例子。
另一种选择是,在图11.2中的插入语句可以从XML列中读入一组入参文档。假定文档都已经被载入到customer表的XML列信息中。此时,你需要修改图11.2中每一句插入语句中的一行来从customer表中读取入参文档:
FROM customer, XMLTABLE('$i/customerinfo' PASSING info AS "i"
如果你需要分割许多文档,那么把输入文档载入分段表是有好处的。载入工具可以并行解析XML文档,这样可以节约把这些文档载入数据库的时间。当这些文档以解析好的格式存储到XML列中以后,XMLTABLE函数无需XML解析就可以分割这些文档。
插入语句可以通过XQuery或者SQL函数或者连接语句(join)得以加强,从而针对特定需求调整分割过程。图11.3提供了一个例子。SELECT从句包括了函数RTRIM来删除列“x.ptype”尾部的空格。XMLTABLE函数表达式的生成行包括了把家庭电话号码排除掉,不让这部分数据被分割进目标表的语句。电话号码生成列的表达式使用了XQuery函数“normalize-space”(用来清理空格),“normalize-space”函数会去掉元素前后的空格,替换重复空格为单一空格。该语句还对查找表的地区代码执行了一次连接,这样一来只有地区代码包含在地区代码表中的电话号码会插入到电话表中。
图11.3 使用函数和连接定制分割功能。
翻译
相关推荐
-
Azure数据湖分析从U-SQL中获得提升
大数据的发展已经让许多精通SQL的数据专业人员不知所措。微软的U-SQL编程语言试图让这些人回归数据查询游戏。
-
TT百科:SQL(结构化查询语言)
一般来说,SQL-on-Hadoop仍是一项新兴技术,但随着各个公司寻求获得拥有大数据应用程序编程SQL技能的开发和分析人员,它们正逐渐成为Hadoop部署的固定组件。
-
SQL和NoSQL数据库设计之争
企业收集了很多大规模增长的松散结构化数据,Hadoop,Spark以及其他新技术处理这些数据非常有助于改善商业智能分析效率。
-
数据库产品巡礼:IBM DB2概览
IBM DB2关系型数据库管理系统提供了支持多平台系统的关键技术,它具备较高的可用性和良好的性能。