濮阳杆衣贸易有限公司

主頁(yè) > 知識(shí)庫(kù) > 使用XQuery查詢DB2 XML數(shù)據(jù)

使用XQuery查詢DB2 XML數(shù)據(jù)

熱門(mén)標(biāo)簽:400電話怎么申請(qǐng)收費(fèi)標(biāo)準(zhǔn) 智能語(yǔ)音外呼系統(tǒng)打電話 怎樣在地圖標(biāo)注自己的信息 電銷外呼系統(tǒng)違規(guī) 濟(jì)南電銷外呼防封卡怎么樣 寧夏外呼系統(tǒng)方案 高德地圖標(biāo)注生成 南京外呼系統(tǒng)租用 400電話辦理2273649Z空間
正在看的db2教程是:使用XQuery查詢DB2 XML數(shù)據(jù)。

關(guān)于 XQuery
XQuery 在很多關(guān)鍵方面都與 SQL 有所不同,這很大程度上是因?yàn)檫@兩種語(yǔ)言是針對(duì)兩種具有不同特征的數(shù)據(jù)模型而設(shè)計(jì)的。XML 文檔包含層次結(jié)構(gòu),并且有其固有的順序。而基于 SQL 的數(shù)據(jù)庫(kù)管理系統(tǒng)所支持的表格數(shù)據(jù)結(jié)構(gòu)是平面的(flat),并且是基于集合的;因此,行之間不存在順序。

這兩種數(shù)據(jù)模型的不同導(dǎo)致它們各自的查詢語(yǔ)言有很多基本的不同。例如,XQuery 支持路徑表達(dá)式,以允許程序員在 XML 的層次結(jié)構(gòu)中導(dǎo)航,而純 SQL(沒(méi)有 XML 擴(kuò)展)則不支持。XQuery 支持有類型的和無(wú)類型的數(shù)據(jù),而 SQL 數(shù)據(jù)總是以指定類型定義的。XQuery 沒(méi)有 null 值,因?yàn)?XML 文檔會(huì)忽略缺失的或未知的數(shù)據(jù)。當(dāng)然,SQL 使用 null 來(lái)表示缺失的或未知的數(shù)據(jù)值。XQuery 返回一系列的 XML 數(shù)據(jù),而 SQL 則返回各種 SQL 數(shù)據(jù)類型的結(jié)果集。

這只是 XQuery 和 SQL 之間的基本不同點(diǎn)中的一部分。提供一份詳盡的列表超出了本文的范圍,不過(guò)即將發(fā)表的 IBM Systems Journal 將更詳細(xì)地討論這些語(yǔ)言的不同?,F(xiàn)在我們就探索一下 XQuery 語(yǔ)言的一些基本方面,并看看如何使用它來(lái)查詢 DB2 Viper 中的 XML 數(shù)據(jù)。

樣本數(shù)據(jù)庫(kù)

本文中的查詢?cè)L問(wèn)在 “DB2 Viper 快速入門(mén)”(developerWorks,2006 年 4 月)中創(chuàng)建的樣本表。清單 1 給出了樣本數(shù)據(jù)庫(kù)中 “items” 和 “clients” 表的定義:

清單 1. 表定義



create table items (

id int primary key not null,

brandname varchar(30),

itemname varchar(30),

sku int,

srp decimal(7,2),

comments xml

)

create table clients(

id int primary key not null,

name varchar(50),

status varchar(10),

contactinfo xml

)

圖 1 中顯示了 “items.comments” 列中包含的樣本 XML 數(shù)據(jù),而 圖 2 中則顯示了 “clients.contactinfo” 列中包含的樣本 XML 數(shù)據(jù)。隨后的例子查詢將引用這兩個(gè) XML 文檔中的一個(gè)或兩個(gè)中的特定元素。

圖 1. 存儲(chǔ)在 “items” 表的 “comments” 列中的樣本 XML 文檔



圖 2. 存儲(chǔ)在 “clients” 表的 “contactinfo” 列中的樣本 XML 文檔



查詢環(huán)境

本文中的所有查詢都是通過(guò)交互方式發(fā)出的。這可以通過(guò) DB2 命令行處理器或 DB2 Control Center 的 DB2 Command Editor 來(lái)完成。本文中的屏幕圖像和說(shuō)明主要使用后一種方式。(DB2 Viper 還附帶了一個(gè)基于 Eclipse 的 Developer Workbench,它可以幫助程序員以圖形化的方式構(gòu)造查詢。本文不討論應(yīng)用程序開(kāi)發(fā)問(wèn)題和 Developer Workbench。)

要使用 DB2 Command Editor,啟動(dòng) Control Center,并選擇 Tools -> Command Editor。這時(shí)將出現(xiàn)如 圖 3 所示的窗口。在上面的面板中輸入查詢,單擊左上角的綠色箭頭運(yùn)行該查詢,然后可以在下面的面板中或者在 “Query Results” 選項(xiàng)卡中查看輸出。

圖 3. DB2 Command Editor,可以從 DB2 Control Center 中啟動(dòng)



XQuery 例子

與在 “用 SQL 查詢 DB2 XML 數(shù)據(jù)” 中一樣,本文將逐步講解一些常見(jiàn)的業(yè)務(wù)場(chǎng)景,并展示如何使用 XQuery 來(lái)滿足對(duì) XML 數(shù)據(jù)的請(qǐng)求。本文還探索了需要將 SQL 嵌入在 XQuery 中的更復(fù)雜的情景。

XQuery 提供了一些不同類型的表達(dá)式,這些表達(dá)式可以隨意組合。每個(gè)表達(dá)式返回一系列的值,這些值又可以作為其他表達(dá)式的輸入。最外面的表達(dá)式的結(jié)果就是查詢的結(jié)果。

本文主要討論兩種重要的 XQuery 表達(dá)式:“FLWOR” 表達(dá)式和路徑表達(dá)式。FLWOR 表達(dá)式非常像 SQL 中的 SELECT-FROM-WHERE 表達(dá)式 —— 它用于對(duì)由多項(xiàng)組成的一個(gè)列表進(jìn)行迭代,并且可以選擇返回通過(guò)在每一項(xiàng)上進(jìn)行計(jì)算得到的值。而路徑表達(dá)式則可以在分層的 XML 元素之間進(jìn)行導(dǎo)航,并返回在路徑末端找到的元素。

與 SQL 中的 SELECT-FROM-WHERE 表達(dá)式類似,XQuery FLWOR 表達(dá)式可以包含數(shù)個(gè)以某個(gè)關(guān)鍵詞開(kāi)頭的子句。在 FLWOR 表達(dá)式中,有以下用于作為子句開(kāi)頭的關(guān)鍵字:

  • for:對(duì)輸入序列進(jìn)行迭代,依次將一個(gè)變量綁定到每個(gè)輸入項(xiàng)
  • let:聲明一個(gè)變量并為之賦值,可能是一個(gè)包含多項(xiàng)的列表
  • where:指定過(guò)濾查詢結(jié)果的標(biāo)準(zhǔn)
  • order by:指定結(jié)果的排序順序
  • return:定義所返回的結(jié)果
XQuery 中的路徑表達(dá)式由一系列的 “步(step)” 組成,之間以斜杠隔開(kāi)。在最簡(jiǎn)單的形式中,每一步在 XML 層次中向下導(dǎo)航,以發(fā)現(xiàn)由前一步返回的元素的孩子。路徑表達(dá)式中的每一步還可以包含一個(gè)謂詞,用于過(guò)濾該步返回的元素,只保留滿足某種條件的元素。例如,假設(shè)變量 $clients 被綁定到包含 Client> 元素的 XML 文檔的一個(gè)列表,則 4 步路徑表達(dá)式 $clients/Client/Address[state = "CA"]/zip 將返回居住在加利福尼亞的客戶的郵政編碼。

在很多情況下,可以任意使用 FLWOR 表達(dá)式或路徑表達(dá)式編寫(xiě)查詢。

使用 DB2 XQuery 作為頂層查詢語(yǔ)言

要在 DB2 Viper 中直接執(zhí)行 XQuery(而不是將它嵌入在 SQL 語(yǔ)句中),必須以關(guān)鍵字 xquery 作為查詢的開(kāi)頭。這個(gè)關(guān)鍵字將指示 DB2 調(diào)用它的 XQuery 解析器來(lái)處理請(qǐng)求。注意,只有在使用 XQuery 作為最外層(頂層)語(yǔ)言的時(shí)候才需要這么做。如果是將 XQuery 表達(dá)式嵌入在 SQL 中,則不需要在語(yǔ)句之前加上 xquery 關(guān)鍵字。但是,本文使用 XQuery 作為基本語(yǔ)言,因此所有查詢之前都加上 xquery。

當(dāng) XQuery 被作為頂層語(yǔ)言時(shí),它需要一個(gè)輸入數(shù)據(jù)的源。XQuery 獲得輸入數(shù)據(jù)的一種方式是調(diào)用一個(gè)名為 db2-fn:xmlcolumn 的函數(shù),調(diào)用時(shí)帶一個(gè)參數(shù),表明 DB2 表中 XML 列所在的表名和該列的列名。db2-fn:xmlcolumn 函數(shù)返回存儲(chǔ)在給定列中的一系列的 XML 文檔。例如,下面的查詢返回一系列包含客戶聯(lián)系方式信息的 XML 文檔:

清單 2. 返回客戶聯(lián)系方式數(shù)據(jù)的簡(jiǎn)單 XQuery



x

[1] [2] [3] [4] [5] 下一篇

標(biāo)簽:唐山 貴港 茂名 惠州 潛江 平頂山 長(zhǎng)白山 仙桃

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《使用XQuery查詢DB2 XML數(shù)據(jù)》,本文關(guān)鍵詞  使用,XQuery,查詢,DB2,XML,數(shù)據(jù),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《使用XQuery查詢DB2 XML數(shù)據(jù)》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于使用XQuery查詢DB2 XML數(shù)據(jù)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    莱芜市| 元谋县| 湘潭县| 赞皇县| 内江市| 虎林市| 江源县| 香港| 荆门市| 右玉县| 沾化县| 山阳县| 高密市| 宁化县| 麻城市| 松溪县| 万安县| 阿拉尔市| 旺苍县| 静海县| 玉山县| 建水县| 南涧| 蚌埠市| 孝义市| 枣强县| 应城市| 赣州市| 绥芬河市| 天祝| 呼玛县| 西乡县| 阿克苏市| 格尔木市| 广西| 中山市| 建昌县| 通海县| 崇阳县| 嵩明县| 佛学|