WEB开发网
开发学院数据库DB2 用 SQL 查询 DB2 XML 数据 阅读

用 SQL 查询 DB2 XML 数据

 2007-05-20 16:17:17 来源:WEB开发网   
核心提示: 清单 5. 根据 XML 元素值限制结果select name from clientswhere xmlexists('$c/Client/Address[zip="95116"]'passing clients.contactinfo as &quo

清单 5. 根据 XML 元素值限制结果select name from clients
where xmlexists('$c/Client/Address[zip="95116"]'
passing clients.contactinfo as "c")

第一行是一个 SQL 子句,指定仅检索 "clients" 表 "name" 列中的信息。WHERE 子句调用 XMLExists 函数,指定一个 XPath 表达式,这个表达式使 DB2 找到 "zip" 元素并检查元素值是否为 95116。"$c/Client/Address" 子句表明 DB2 用于定位 "zip" 元素的 XML 文档层次结构中的路径。通过使用可以从节点 "$c"(稍后将会解释)访问的数据,DB2 将从 "Client" 元素中找到它的子元素 "Address",以便检查邮政编码("zip" 值)。最后一行决定 "$c" 的值:它是 "clients" 表的 "contactinfo" 列。因此,DB2 检查 "contactinfo" 列中的 XML 数据,从根元素 "Client" 深入到 "Address" 子元素再找到 "zip" 子元素,然后判断客户是否居住在目标地区。如果客户住在目标地区,则 XMLExists 函数的返回值为 "true",DB2 将返回与那一行相关的客户的姓名。

在使用 XMLExists 查询谓词时经常会出现一个错误,如 清单 6 所示。

清单 6. 根据 XML 元素值限制结果时采用的不正确语法select name from clients
where xmlexists('$c/Client/Address/zip="95116" '
passing clients.contactinfo as "c")

虽然这个查询也可以成功地执行,但是它不能限制结果,使之仅包含居住在邮政编码为 95116 的地区的客户。(这是由于标准中规定的语义造成的,而且这并不是 DB2 所特有的。)为了限制结果,使之仅包含居住在邮政编码为 95116 的地区的客户,需要使用前面 清单 5 中展示的语法。

上一页  1 2 3 4 5 6 7 8 9 10  下一页

Tags:SQL 查询 DB

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接