DB2 Version 9.5 pureXML的增强和新特性(三)

 
   | |

导读:DB2将XML作为一个新数据类型引入,而且提供了处理XML值的基础设施。它提供了一些基本功能,比9如查询XML文档、注册模式和验证XML文档、使用SQL/XML在SQL和……

关键词:DB2 Version 9.5 pureXML DB2 9 DB2增强和新特性

正在加载数据...

XSLT支持

DB2 V9.5提供了使用数据库本身的XSL转换来处理XML文档的功能。可以使用XSLT样式表将存储在数据库中的XML文档转换为HTML格式。为此,DB2 V9.5引入了xsltransform函数。该函数还支持使用参数的样式表。xsltransform函数可以将作为XML文档存储在数据库表列中的 XSLT样式表应用到XML文档上。这为用户提供了灵活性,用户可以检索来自数据库的经过转换的XML文档,并可以直接在Web上显示。

现在,假设您已有下面的XML文档:

清单10.XML文档


Ice Scraper, Windshield 4 inch
Basic Ice Scraper 4 inches wide, foam handle
3.99

以及相应的 XSLT 样式表:

清单11. XSLT 样式表


﹤?xml version="1.0" encoding="UTF-8"?﹥﹤xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"﹥
﹤xsl:template match="products"﹥
﹤html﹥
﹤head/﹥
﹤body﹥
﹤table border="1"﹥
﹤th﹥
﹤tr﹥
﹤td width="80"﹥product ID﹤/td﹥
﹤td width="200"﹥product name﹤/td﹥
﹤td width="200"﹥price﹤/td﹥
﹤td width="50"﹥details﹤/td﹥
﹤/tr﹥
﹤/th﹥
﹤xsl:apply-templates/﹥
﹤/table﹥
﹤/body﹥
﹤/html﹥
﹤/xsl:template﹥
﹤xsl:template match="product"﹥
﹤tr﹥
﹤td﹥﹤xsl:value-of select="@pid"/﹥﹤/td﹥
﹤td﹥﹥﹤xsl:value-of select="./description/name"/﹥﹤/td﹥
﹤td﹥﹤xsl:value-of select="./description/price"/﹥﹤/td﹥
﹤td﹥﹤xsl:value-of select="./description/details"/﹥﹤/td﹥
﹤/tr﹥
﹤/xsl:template﹥
﹤/xsl:stylesheet﹥

这些文档需要存储在表中,或者当作参数传递。当将这些值作为参数传递时,请确保它们是格式良好的XML文档。参数的数据类型可以是XML、VARCHAR、CLOB或BLOB。假设文档和样式表都存储在表中,可以用以下语句转换XML文档:

注意:示例假设存储文档的表名称为xslt,XML文档的列名为xmldoc,XSL文档的列名为xsldoc。

清单12.XSLTransform表达式


SELECT XSLTRANSFORM (description USING stylesheet AS CLOB (10M))
FROM product_details

这个查询输出一个 HTML 文档,可以在浏览器中进行查看。清单 13 显示该 HTML 输出:

清单13. XSLTransform 表达式的 HTML 输出


﹤html﹥
﹤head﹥
﹤METAhttp-equiv="Content-Type"content="text/html;charset=UTF-8"﹥
﹤/head﹥
﹤body﹥
﹤tableborder="1"﹥
﹤th﹥
﹤tr﹥
﹤tdwidth="80"﹥productID﹥td﹥
﹤tdwidth="200"﹥productname﹥/td﹥
﹤tdwidth="200"﹥price﹥/td﹥
﹤tdwidth="50"﹥details﹥/td﹥
﹤/tr﹥
﹤/th﹥
﹤tr﹥
﹤td﹥100-201-01﹥/td﹥
﹤td﹥IceScraper,Windshield4inch﹥/td﹥
﹤td﹥3.99﹥/td﹥
﹤td﹥BasicIceScraper4incheswide,foamhandle﹥/td﹥
﹤/tr﹥
﹤/table﹥
﹤/body﹥
﹤/html﹥

用户也可以将XML文档和一个XSLT样式表存储在不同的表中,而且可以通过连接表将单个XSLT样式表应用到多个XML值。

发布函数

发布函数用来将关系数据转换为XML值。DB2 9引入了SQL/XML支持,该支持在DB2 V9.5中得到了增强和简化。一些DB2 9SQL/XML函数,比如xmlelement,需要提供所有XML元素的名称、属性和其他节点,而这些元素来自表的关系列或者被显式地提供。有时用户需要生成XML值,但是不想牵涉到元素名称。

通过引入新函数xmlrow和xmlgroup,DB2 V9.5对现有的发布函数进行了扩展。这些函数从表列获得XML元素的名称和值。xmlrow输出是一个表示为XML的行值的序列,xmlgroup函数将所有值集合到一个根节点下。

下表是一个示例employee表,该表拥有员工的详细地址,包含以下记录:


IDNAMESTREETCITYSTATECOUNTRY
1manojsector14gurgaonharyanaindia

下面的查询在该行中应用了xmlrow和xmlgroup函数。

清单14.新发布函数


db2SELECTXMLROW(id,name,street,city,state,country)FROMEMPLOYEE
1
manoj
sector14
gurgaon
haryana
india
db2SELECTXMLGROUP(id,name,street,city,state,country)FROMEMPLOYEE
1
manoj
sector14
gurgaon
haryana
india

在DB2 9中,为了得到相同结果,除了显式地提供元素名称,还需要将xmlelement应用到每个列值。

跟V91版本中相同的查询相比,示例代码xmlintegrate.db2为这些函数提供了更多复杂例子。可以在sqllib/samples/xml/clp目录下找到该示例。

将参数传递给sqlquery函数

在DB2 9中,sqlquery函数将一个SQL语句嵌入到XQuery表达式中。此函数将一个字符串值作为输入,该字符串是一个有效的SQL全选择语句。在DB2 9中,不能将参数从XQuery语句传递给此函数。

DB2 V9.5增强了该函数,引进了一个新的parameter函数,该函数将一个整数值作为输入。现在,sqlquery函数可以将多个参数作为输入,第一个参数是一个表示全选择的字符串,其后是参数的值。sqlquery函数的第一个字符串参数可以包含parameter函数,该函数将会被传递给 sqlquery函数的参数取代,该参数位于第一个必需的字符串参数之后。传递给parameter函数的整数值表示在调用sqlquery函数中参数的位置,该参数将会在调用中被取代。例如,parameter(1)告诉解析器用字符串参数后的第一个参数替代这个值。参数的类型应该和全选择所期望的值类型相同。可以使用类型转换函数将值转换为一个合适的类型。

让我们以示例数据库中的customer表作为例子。可以通过运行db2sampl命令和从firststep创建示例数据库。firststep是DB2提供的一个工具,在安装了DB2之后就会执行,也可以在以后通过在Windows中选择Start>AllPrograms>IBMDB2>db2copyname>Setuptools>firststeps来执行。

customer表包含一个作为关系列的cid列,以及表示顾客id的键值。infoXML列具有一个属性Cid,该属性也表示顾客id。如果数据是一致的,那么属性Cid值应该与特定行的cid列值相同。以下的查询将检查数据保持一致的行的数量。Cid属性的值被传递给sqlquery函数,以将其与关系cid值进行比较。

清单15.将参数传递给sqlquery函数


xquerydeclaredefaultelementnamespace"http://posample.org";
for$iindb2-fn:xmlcolumn("CUSTOMER.INFO")/customerinfo/@Cid
for$jindb2-fn:sqlquery("selectinfofromcustomerwherecid=parameter(1)",$i)
return
{$i}

此查询返回所有数据一致的顾客id。

示例代码xqueryparam.db2提供了一些不错的例子,将一个和多个参数传递给sqlquery函数。可以在sqllib/samples/xml/clp目录中找到该示例。

现有函数XMLQuery、XMLtable和XMLExists的默认传递行为

在DB2 9中,函数xmlquery、xmltable和xmlexists用来将Xquery语句嵌入到SQL语句中。利用这些函数的PASSING子句将参数从SQL语句传递给这些函数。

在DB2 9中,如果同一个SQL语句中的这些函数会执行多次,那么每次执行都需要一个独立的PASSING子句。有时这会使查询的结构看起来很复杂和庞大。DB2 V9.5扩展了这些函数,以使用默认的传递机制。现在,将一个列名称用作这些函数的Xquery中的一个变量名。如果没有使用显式的PASSING子句,默认情况下DB2将传递相同列给一个变量。这使查询更精简并更易于理解。以下代码给出了一个针对示例数据库表的例子。查询为名为RobertShoemaker的顾客获取purchaseorder中的第一项。

清单16.SQL/XML函数的默认传递行为


SELECTXMLQUERY('declaredefaultelementnamespace"http://posample.org";
$PORDER/PurchaseOrder/item[1]')
FROMpurchaseorderASp,customerASc
WHEREXMLEXISTS('declaredefaultelementnamespace"http://posample.org";
$INFO/customerinfo[name="RobertShoemaker"and@Cid=$CUSTID]')

对于SELECT子句中的xmlquery函数,默认情况下传递purchaseorder表的 porder列。同样地,对于xmlexists函数,默认情况下传递customer表的info列和custid列。请确保以大写字母的方式使用这些变量的名称,因为xquery是一个区分大小写的语言,而且关系列名称常常以大写的方式存储。

XML验证约束

DB2 V9.5增强了SELCT语句使用的ISVALIDATED子句,以包含ACCORDINGTOXMLSCHEMAID。现在用户能够提供多个模式并仅选择针对这些模式验证的XML值。DB2 V9.5可以将任何XML表达式(而不是一列)作为一个操作数,这具有很大的灵活性。下面的例子只选择了customer表中用customer模式验证之后的文档。

清单17.SELECT语句中的XML验证约束


db2SELECTinfoFROMcustomer
WHEREinfoISVALIDATEDACCORDINGTOXMLSCHEMAIDcustomer

经过注释的XML模式分解

DB2 9支持XML模式的注释,因此除递归模式外,可以将数据分解为关系表。DB2 V9.5解除了这个限制,现在即使模式是递归的,用户也可以对数据进行注释和分解。

DB2 V9.5扩展了分解,以提供插入顺序。当将数据分解成多个具有外键关系的表时,这尤其重要。在这种情况下,应该首先填充主表,以保持引用约束。可以使用以下注释指定插入顺序:

清单18.对模式进行注释,以提供插入顺序


CUSTOMER
PURCHASEORDER

示例代码recxmldecomp.db2和xmldecomposition.db2给出了一些不错的例子,其中分别演示了将递归模式和插入顺序进行注释并分解到表中。可以在sqllib/samples/xml/clp目录中找到示例代码。

XML索引增强

DB2 9引入了XML索引。可以在数据库中XML文档的特定节点上创建XML索引。索引的数据类型可以是VARCHAR、DOUBLE、DATE或TIMESTAMP。如果索引的数据类型与XML文档的元素类型不匹配,DB2将插入XML值,但是不会为该值创建索引。

DB2 V9.5为索引引入了一个附加子句REJECTINVALIDVALUES。如果使用该子句创建索引,并且索引的数据类型与正在插入的XML文档中元素的数据类型不匹配,插入将会失败。如果在插入XML值之后创建索引,而且数据类型不匹配,索引创建也会失败。

对于DB2 V9.5,这种行为是默认的,也可以使用IGNOREINVALIDVALUES子句显式地指定这种行为。

下面的示例将会使用REJECTINVALIDVALUES为customer表的Cid属性创建一个索引。

清单19.XML索引


db2CREATEINDEXindex1ONcustomer(info)
GENERATEKEYUSINGXMLPATTERN
'declaredefaultelementnamespace"http://posample.org";
/customerinfo/@cid'asSQLDOUBLEREJECTINVALIDVALUES

Index顾问程序和优化器增强

索引顾问程序可以用来获得关于同时为XML和关系数据建立索引的建议。通过同时为XML和关系数据建立索引,用户可以获得良好的性能提升。DB2 9.5优化器使用两种类型的索引来优化查询,并帮助选择最佳的查询执行计划。

DB2 DataWeb服务

使用DataWeb服务,可以将DB2 V9.5XML数据作为数据库manipulation(ML)操作的Web服务公开。DataWeb服务(DES)将ML操作(如插入、更新、选择和存储过程)作为Web服务公开。可以通过Web浏览器、用户客户端使用基于HTTP的SOAP协议(例如POST和GET方法)来访问这些Web服务。通过在现有数据库工具中集成基于Eclipse的工具,可以对DataWeb服务提供支持。

控制中心也经过了更新,以处理XML数据。

结束语

DB2 9将XML作为一个新数据类型引入,而且提供了处理XML值的基础设施。它提供了一些基本功能,比如查询XML文档、注册模式和验证XML文档、使用SQL/XML在SQL和XQuery之间交互。DB2 V9.5增强了现有的功能,并提供了更多函数以有效地处理XML数据。


DB2 Version 9.5 pureXML的增强和新特性
 DB2 Version 9.5 pureXML的增强和新特性(一)
 DB2 Version 9.5 pureXML的增强和新特性(二)
 DB2 Version 9.5 pureXML的增强和新特性(三)

原文出处:http://database.51cto.com/art/200903/113743_2.htm
 
来源:51cto    
 
 
 
 
 

DB2数据库设计

 
你可以针对XML数据使用XMLTABLE函数创建关系型视图。这种功能可以使你提供给应用程序一个关系型或者一个XML数据的混合视图。
 
要改善XML插入性能并降低你数据库中表的数量,你可能想以混合方式存储XML文档。这种方法提取选定XML元素和属性的值并把它们挨着完整的XML文档存储在关系列中。
 
XMLTABLE函数是一个SQL表函数,可以通过XQuery表达式从XML输入文档中创建关系数据行。本文阐述了如何在SQL插入语句中使用XMLTABLE函数来实现对XML的分割。
 
通过完成DB2表测试题,可以测试你对DB2 9的掌握情况。这些题是从以前DB2 9基础认证考试(Exam 730)真题中选出来的。
 
我们想将数据通过以下命令从DB2表导出到平面文件……,但是得到的结果如下(它的结果包括sql、列表名称和消息?EURoe2 record(s) selected?EUR?),但我们要结果显示成……

热门技术手册排行

 

在本次的技术手册中,我们为您提供了PL/SQL的基础知识以及专家指导,包括了PL/SQL中的数据类型简介、PL/SQL函数与触发器以及PL/SQL中的存储过程等,相信您无论是高手还是菜鸟都可以获得有帮助的信息。

 

本系列文章由三部分组成,为Oracle数据库管理员(DBA)面试成功的必备手册。本专题内容囊括从DBA最初的面试开始,从写“杀手简历”到求职信、到面试过程到Oracle认证再到上升到公司高层最后到你成为公司里的明星DBA。专家为你一一指点迷津,最终让你登上成功的宝座。

 

要成为一名DBA,你需要具备哪些素质?DBA的薪酬待遇如何?DBA的职业道路究竟可以走向何方?我们将在本次的技术手册中为您一一解答。

 

在本次技术手册中,我们将对SQL Server存储过程的调试进行详细的介绍,包括了基础的调试方法和在调试过程中出现的T-SQL性能问题和解决方法。

 

本技术专题主要围绕sql server设计这个话题展开,侧重介绍了sql server集簇索引的设计、如何创建sql server索引、如何优化索引、索引的能与不能、处理sql server 2000索引碎片技巧以及维护sql server索引以实现查询优化等等。

查看更多
 
 

登录TechTarget中国

关闭
本服务仅向TechTarget中国的会员开放,请登录或立即免费注册
电子邮件地址:
请输入您的电子邮件地址
密码:
下次自动登录