用DB2 pureXML执行不区分大小写的高效搜索(一)

 
   | |

导读:本文解释如何使用DB2 pureXML创建不区分大小写的数据库以及让XML查询和XML索引发挥预期的作用。用大写和小写函数执行不区分大小写的搜索。

关键词:DB2 pureXML DB2搜索 不区分大小写

正在加载数据...

根据定义,XML元素和属性的值是区分大小写的。例如,如果搜索值为“Paris” 的 <CITY>元素,那么不会找到“PARIS”或“paris”。可以使用fn:upper-case()等XQuery函数解决这个问题,但是使用这些函数时不能使用XML索引,所以性能可能不好。本文解释如何使用DB2 pureXML 创建不区分大小写的数据库以及让XML查询和XML索引发挥预期的作用。用大写和小写函数执行不区分大小写的搜索。

下面的示例帮助您更清楚地理解不区分大小写的搜索。清单1定义一个包含一个INTEGER列和一个XML列的表,并在表中插入7行。每行包含一个小的客户文档,其中包含XML元素 <CITY>。

此元素中的值在大小写方面并不一致。一些值是全大写的,一些是全小写的,其他是大小写混合的(首字母大写)。如果数据来自不同的应用程序,而这些应用程序采用不同的大小写数据输入规则,就会出现这种情况。

清1. 示例表和数据


CREATE TABLE customer (id INTEGER, xmldoc XML);
INSERT INTO customer (id, xmldoc)
VALUES (1,'<Customer id="1"><city>PARIS</city></Customer>'),
       (2,'<Customer id="2"><city>Tokyo</city></Customer>'),
       (3,'<Customer id="3"><city>tokyo</city></Customer>'),
       (4,'<Customer id="4"><city>PARIS</city></Customer>'),
       (5,'<Customer id="5"><city>paris</city></Customer>'),
       (6,'<Customer id="6"><city>Delhi</city></Customer>'),
       (7,'<Customer id="7"><city>Paris</city></Customer>');  

如果一个应用程序查询这些XML文档,寻找某一城市的客户,那么很可能需要不区分大小写的搜索。例如,可能希望找到 Paris 的所有客户,也就是希望获取第 1、4、5 和 7 行。但是,如果搜索值 “Paris”,那么只会返回第 7 行。要想获取所需的所有四行,可以使用 XQuery 函数 fn:upper-case() 把 city 元素值转换为大写并与 “PARIS” 做比较。清单 2 中的查询就采用这种方式,它会返回 Paris 的所有四个客户。

清单2. 选择 Paris的客户  


  SELECT id, XMLCAST( XMLQUERY('$XMLDOC/Customer/city') AS VARCHAR(15)) AS cityFROM customerWHERE XMLEXISTS('$XMLDOC/Customer[fn:upper-case(city) = "PARIS"]');  

如果查询通过一个参数标志提供搜索值,那么这个参数也应该转换为大写,见 清单3。这个参数标志(“?”)的类型为 VARCHAR(15)并作为变量“c” 传递给XQuery谓词。

清单3. 使用参数标志选择客户

  


 SELECT id, XMLCAST( XMLQUERY('$XMLDOC/Customer/city') AS VARCHAR(15)) AS cityFROM customerWHERE XMLEXISTS('$XMLDOC/Customer[fn:upper-case(city) = fn:upper-case($c)]'PASSING CAST(? AS VARCHAR(15)) AS "c");  

  图1显示以上示例查询的输出。

示例查询的结果

图 1. 示例查询的结果


用DB2 pureXML执行不区分大小写的高效搜索
 用DB2 pureXML执行不区分大小写的高效搜索(一)
 用DB2 pureXML执行不区分大小写的高效搜索(二)

原文出处:http://www.ibm.com/developerworks/cn/data/library/techarticles/dm-0811nicola/
 
来源:IBM    作者:Matthias Nicola     
 
 
 
 
 

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中国的会员开放,请登录或立即免费注册
电子邮件地址:
请输入您的电子邮件地址
密码:
下次自动登录