成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

DB2 Version 9.5 pureXML的增強和新特性

數據庫
本文描述 IBM® DB2® V9.5 版針對 Linux、Unix 和 Windows 的 pureXML™ 增強和新特性。DB2 Version 9 支持將 XML 作為原生數據類型,也支持 SQL/XML、XQuery 語言,以及其他諸如模式支持、發布函數、對實用工具的 XML 支持、分解等特性。DB2 V9.5 增強了其中的一些特性并引入了新特性,以更加高效地處理 XML。本文從如何使 XML 處理更高效和更易于使用的角度解釋了這些增強和新特性。

DB2 9XML支持概述

DB2 9引入了原生XML數據類型。它將XML存儲為一種經過解析的分層(原生)格式,并允許用戶使用XQuery和SQL/XML語言查詢數據。DB2XQuery表達式將存儲在DB2數據庫中的XML文檔用作XML的查詢源。函數xmlcolumn和sqlquery用來連接存儲在數據庫中的XML值,并為XQuery解析器提供XML序列。

除了XQuery語言,DB2 9還提供了SQL/XML函數在單個查詢中同時處理XML數據和關系數據。SQL/XML函數xmlquery、xmltable和xmlexists有助于將XQuery嵌入到SQL語句中。

DB2 9還支持模式驗證。它引入了新的命令和存儲過程,用于將模式注冊到數據庫并充當數據庫對象。在插入操作之前或之后,可以用xmlvalidate函數根據已注冊的模式驗證XML值。也可以對模式進行注釋,以便于將XML數據分解為關系表。諸如xmlelement、xmlattributes等發布函數可用來將關系值轉換為XML文檔。DB2 9也針對XML數據支持對一些實用工具(導入、導出等等)進行了更新。更多關于Version9中的XML支持請參見參考資料部分。

DB2 V9.5的新特性

在處理XML數據方面,現有的DB2 9功能非常強大。DB2 V9.5增強了一些現有特性并引入了其他功能,以使XML處理更加強大和高效。下面是本文將要討論的功能列表:

◆支持在非Unicode數據庫中使用XML

◆子文檔更新

◆基礎表存儲/壓縮

◆兼容的XML模式演化

◆驗證觸發器

◆驗證檢查約束

◆XML復制

◆XML聯合

◆XML載入

◆sqlquery()參數

◆用戶友好的發布函數

◆SQL/XML函數的默認參數傳遞

◆XSLT函數

◆XML分解增強

◆XML索引增強

◆索引顧問程序(Indexadvisor)和優化器增強

◆DB2DataWeb服務

以下小節的大多數代碼示例都基于DB2 V9.5示例數據庫。可以從DB2 V9.5命令行處理器運行db2sampl命令來創建示例數據庫。也可以通過firststep來創建。firststep是DB2提供的一個工具,在安裝了DB2之后就會執行,也可以在以后通過在Windows中選擇Start>AllPrograms>IBMDB2>db2copyname>Setuptools>firststeps來執行。

支持在非Unicode數據庫中使用XML

DB2 9只允許用戶使用UTF-8代碼頁創建包含XML數據的數據庫。這意味著,即使XML文檔中的值是ASCII格式的,也需要存儲到UTF-8格式的數據庫中。DB2 V9.5去掉了這個限制,并且允許用戶用任意代碼集創建包含XML列的數據庫。由于去掉了這個限制,即使數據庫不是用UTF-8格式創建的,用戶也可以更改一個表以添加XML列,或者創建一個包含XML列的新表。

以下代碼創建了一個示例數據庫和包含一個XML列的示例表:

清單1.使用默認代碼頁的數據庫

db2 CREATE DATABASE sampledb
db2 CONNECT TO sampledb
db2 CREATE TABLE record(id INT, record XML)
子文檔更新

DB2 V9.5允許用戶更新存儲在數據庫中的XML文檔的一部分。它引入了XQuerytransform表達式,該表達式使用4個更新表達式——insert、delete、replace和rename來修改XML文檔片段。transform表達式是XQuery語言的一部分,因此可以用在XQuery表達式中。對于DB2 V9.5,一個transform表達式中只能使用一個更新表達式。一個transform表達式有以下子句:
◆COPY:transform表達式的copy子句將源XML值綁定到一個變量。更新表達式將會在查詢中對該副本進行處理。

◆MODIFY:modify子句根據更新表達式修改復制的XML值。在MODIFY子句中可以使用多個更新表達式。

◆return:return子句返回修改后的值。

下面將解釋這4個更新表達式:

1.insert表達式將一個新的XML節點插入到現有XML文檔中。可以在XML文檔指定插入的位置.

2.replace表達式用來更新特定節點的特定值。

3.delete表達式用來從XML文檔刪除特定節點。

4.rename表達式用來對節點進行重命名。

由于transform表達式是XQuery語言的一部分,因此可以在包含xmlquery函數的SQL語句中使用它,也可以用于更新語句來更新XML值。

清單2中的代碼更新了示例數據庫中customer表的info列。它更新XML文檔以使用cid關系列的值匹配CID屬性。

清單2.更新表的transform表達式

UPDATE CUSTOMER
SET info =
XMLQUERY('transform
copy $po := $INFO
modify
do replace value of $po/customerinfo/@Cid with $CID
return $po'
passing info as "INFO", cid as "CID")
WHERE cid=1000

如果在表的XML列上存在XML驗證檢查約束,在手動更新或者通過觸發器更新之前,用戶可能需要驗證新的XML值。

以下代碼示例從purchaseorder表中刪除一個條目,并將修改后的文檔作為查詢結果。

清單3.transform表達式

xquery
transform
copy
$po := db2-fn:sqlquery(‘select porder from purchaseorder where
custid = 1002 and orderdate=“2006-02-18”’)
modify
do delete $po/ PurchaseOrder/item[partid = “100-201-01”]
return $po

示例xupdate.db2給出了transform表達式的不同例子。可以在sqllib/samples/xml/xquery/clp目錄下找到此示例。

基礎表行存儲/壓縮

在DB2 9中,XML數據和關系數據存儲在不同的位置。這個存儲位置稱作XML數據區域(XMLdataarea,XDA)。DB2 9將所有XML文檔存儲在這個存儲位置,這意味著訪問XML值和關系數據需要更多I/O。如果XML文檔較小,而且在存儲關系值之后頁面大小仍足夠容納XML值,那么將XML存儲在相同的頁面能夠提供不錯的性能收益。這些收益包括:

壓縮:因為XML數據和關系數據存儲在一起,因此可以使用DB2 9中引入的壓縮技術對XML數據進行壓縮。由于XML值比關系數據大,所以可以獲得較高程度的壓縮。

查詢性能:由于XML數據和關系數據存儲在相同位置,因此直接插入XML數據使得基礎表比一般情況下要大。如果XML數據的訪問頻率與表中的其他關系值相當,那么這將提高查詢數據的性能。

DB2 V9.5引入了XML數據的基礎表行存儲。這意味著如果每行的關系數據和XML數據的總大小沒有超過1頁面的大小,這兩種數據就可以存儲在相同的物理頁面。只有當一個記錄的總大小沒有超過頁面大小時,才能夠對XML數據進行基礎表行存儲。如果是這樣,XML數據就會像通常一樣存儲在XML存儲位置。DB2中允許的頁面最大值為32KB,因此一個XML值的最大插入長度也被限制到32KB。如果文檔的內部樹表示的大小比指定的插入長度小,它們將會被插入。清單4中的代碼所創建的表可以對XML數據進行基礎表行存儲:

清單4.XML數據的基礎表存儲

db2 CREATE TABLE emp1(id INT, info XML INLINE LENGTH 1024)

使用 INLINE 選項指定將 XML 數據跟關系數據存儲在一起。這對于要獲取的數據都位于相同位置的查詢來說很有利。另一方面,對于訪問非 XML 數據的查詢,這可能導致需要更多的 I/O 才能找到關系數據。

#p#

使用 XML 數據基礎表行存儲的理想情形是,當表只有一個 XML 類型列并且 XML 文檔的最大值沒有超過頁面大小時。

兼容的 XML 模式演化

為了增加靈活性并提供更好的模式演化,DB2 V9.5 為 XML 模式引入了 update 特性。以前注冊的模式能夠更新為新模式,只要它們互相兼容。如果使用舊模式驗證的 XML 文檔對于新模式仍然有效,那么這兩種模式就是兼容的。

例如,新模式中添加的可選元素和舊模式中的元素兼容,這是由于新元素的可選特性使經過舊模式驗證的 XML 文檔仍然有效。新 XML 文檔可以擁有這個可選元素,并且能夠通過新模式的驗證。因為舊文檔仍然有效,所以更新模式之后無需再執行任何操作。如果模式不兼容,模式更新就會失敗。舊模式的注釋和標識符仍然會保留。

為了更新模式,DB2 V9.5 引入了 XSR_UPDATE 存儲過程。存儲過程檢查兼容性,只當新模式具備兼容性時才更新模式。要更新模式,用戶需要分別注冊新舊模式,然后調用 XSR_UPDATE 存儲過程。一旦舊模式經過更新,用戶可以選擇保留舊模式或者將其刪除。

讓我們以 customer 表的 info 列作為一個例子。info 列包含 addr 元素,該元素具有以下定義(在 sqllib/samples/db2sampl 目錄下可以找到完整的模式)。

清單 5. 舊 XML 模式定義

﹤xs:element xmlns:xs="            name="addr" minOccurs="1" maxOccurs="unbounded"﹥
﹤xs:complexType﹥
﹤xs:sequence﹥
﹤xs:element name="street" type="xs:string" minOccurs="1" /﹥
﹤xs:element name="city" type="xs:string" minOccurs="1" /﹥
﹤xs:element name="prov-state" type="xs:string" minOccurs="1" /﹥
﹤xs:element name="pcode-zip" type="xs:string" minOccurs="1" /﹥
﹤/xs:sequence﹥
﹤xs:attribute name="country" type="xs:string" /﹥
﹤/xs:complexType﹥
﹤/xs:element﹥

之后,用戶希望擁有一個可選的 HouseNo 元素。要更新已注冊的模式以使標識符保持不變,需要先注冊包含附加元素的新模式。 新 addr 元素的定義如下:

清單 6. 新 XML 模式定義

﹤xs:element xmlns:xs="            name="addr" minOccurs="1" maxOccurs="unbounded"﹥
﹤xs:complexType﹥
﹤xs:sequence﹥
﹤xs:element name="HouseNo" type="xs:string" minOccurs="0" /﹥
﹤xs:element name="street" type="xs:string" minOccurs="1" /﹥
﹤xs:element name="city" type="xs:string" minOccurs="1" /﹥
﹤xs:element name="prov-state" type="xs:string" minOccurs="1" /﹥
﹤xs:element name="pcode-zip" type="xs:string" minOccurs="1" /﹥
﹤/xs:sequence﹥
﹤xs:attribute name="country" type="xs:string" /﹥
﹤/xs:complexType﹥
﹤/xs:element﹥

注冊之后,可以用以下存儲過程將現有模式更新為新模式:

清單7. 使用 XSR_UPDATE 更新模式

db2 call XSR_UPDATE('RSCHEMA','CUSTOMER','RSCHEMA','CUSTOMER1',0)

最后一個參數值0表示更新之后不應該刪除新模式。如果該參數設置為其他非零值,在更新操作之后新模式將會被刪除。

示例代碼xsupdate.db2演示了兼容的XML模式演化。可以在sqllib/samples/xml/clp目錄中找到該示例。

驗證觸發器支持

為了提高應用程序靈活性并為用戶提供對引入的XML文檔的自動驗證功能,DB2 V9.5擴展了在beforetrigger中對XML的支持。beforetrigger是使用BEFORE選項創建的觸發器,并在inster/update/delete操作之前執行。在beforetrigger中,可以在新變量中引用XML值。觸發器的操作可以對新值應用xmlvalidate函數。觸發器的WHEN子句可以用來檢查是否根據任何指定模式對新值進行了驗證。可以使用WHEN條件中的ISVALIDATED或ISNOTVALIDATEDACCORDINGTOXMLSCHEMA子句來完成該操作。根據WHEN條件的輸出,可能還需要驗證XML值或設置一個新值。目前,只允許將xmlvalidate函數用于XML類型的transition變量。觸發器創建之后,在每次執行插入操作時,將會被自動激活并執行,如果在插入語句中沒有驗證XML值,也可以用觸發器進行驗證。

以下代碼是一個DDL語句,用于創建customer表和根據該表定義的觸發器。只要存在對表的插入操作,就會激活觸發器。如果沒有在插入語句中對XML文檔進行驗證,觸發器將會在插入之前使用xmlvalidate函數驗證該文檔。以下的示例代碼假設表的customer不存在,并且已經在數據庫中注冊了該customer模式。

清單8.為一個表定義的觸發器

CREATE TABLE Customer ( Cid        BIGINT NOT NULL,
info XML,
History XML,
CONSTRAINT PK_CUSTOMER PRIMARY KEY (Cid))
CREATE TRIGGER Trigger_customer NO CASCADE BEFORE INSERT ON customer
REFERENCING NEW AS n
FOR EACH ROW MODE db2sql
WHEN (n.info IS NOT VALIDATED ACCORDING TO XMLSCHEMA ID customer)
BEGIN ATOMIC
SET n.info = XMLVALIDATE(n.info ACCORDING TO XMLSCHEMA ID customer);
END@

示例 xmltrig.db2 提供了不同的場景和操作,這些操作用來分配新值并驗證 XML 值,可以在觸發器內部執行。該示例可以在 sqllib/samples/xml/clp 目錄中找到。

XML 驗證檢查約束

檢查約束(check constraint)是一類可以在創建表時作用到表列的約束。只有當約束合法時,DB2 才允許插入操作,否則插入將會失敗。

DB2 V9.5 支持對 XML 值進行檢查約束。用戶可以使用檢查約束來加強對 XML 列的驗證。與 before trigger 類似,可以在檢查約束中使用 IS VALIDATED ACCORDING TO XMLSCHEMA 子句來加強驗證。惟一的區別在于,這種約束只檢查驗證條件,并不會進行實際的驗證。用戶可以在插入語句中使用 xmlvalidate 來顯式驗證 XML 值,或者使用 before trigger 來執行自動驗證。根據檢查約束中指定的模式,只有當 XML 值有效時,才能成功插入。

對一個表 XML 值應用 before trigger 和檢查約束,往往可以確保 XML 值對于指定模式是有效的。只要執行了插入操作,before trigger 就會自動進行驗證,而檢查約束將會讓用戶顯式地使用 xmlvalidate 函數。這兩種方法可以一起使用,以加強 XML 值的完整性。

清單9 中的代碼將會修改 清單 8 中創建的表 customer,以對表執行檢查約束:

清單9. 檢查約束

db2 ALTER TABLE customer ADD CONSTRAINT check_info

CHECK(info IS VALIDATED ACCORDING TO XMLSCHEMA ID customer)

上面創建的檢查約束總是會檢查是否根據 customer 模式對文檔進行了驗證。如果沒有觸發器,用戶需要使用 xmlvalidate 函數顯式地驗證該文檔。

示例代碼 xmlcheckconstraint.db2 演示了如何為具有相同結構的不同表創建視圖,該視圖可以進行檢查約束,以及按模式對表進行劃分。

XML 復制支持

DB2 V9.5 支持將 XML 數據復制到其他支持 XML 數據的數據庫。可以使用 WebSphere® Replication Server 9.5 版或者 WebSphere Data Event Publisher 9.5 版來進行復制。WebSphere Replication Server 可以將 XML 數據復制到支持 XML 數據類型的聯合目標,也可以將 XML 數據映射到 CLOB/BLOB 列。

像任何其他關系列一樣,對 XML 數據的復制是在事務消息中完成的,因此復制的 XML 的大小將受到最大事務消息長度的限制。如果數據很大,可以在原始文檔中插入一個占位符文檔。也可以在例外表中插入一個例外。

當進行復制時,不能對 XML 模式注冊進行復制。此外,在復制過程中也不能對 XML 數據進行驗證。

XML 聯合支持

WebSphere Federation Server Version 9.1 支持 pureXML,因此能夠集成本地和遠程的 XML 存儲數據。可以將來自不同數據庫的 XML 數據當作本地數據查看,而且可以用 DB2 XQuery 和 SQL/XML 查詢這些數據。可以在遠程聯合數據庫上創建一個視圖,以連續字符串的方式查看該數據,這些數據可以在 WebSphere Federation Server 上解析為 XML 值。現在 DB2 可以使用 SQL/XML 和 XQuery 語言通過為視圖創建的別名來查詢數據。

與驗證本地 XML 值的方式相同,可以使用 db2 xmlvalidate 函數驗證來自不同聯合數據源的 XML 數據。

載入支持

DB2 9 主要支持兩種用 XML 值填充表的方式。insert 語句向表中插入 XML 值,import 實用程序用于將大量數據導入表中。

DB2 V9.5 擴展了對 load 實用程序的支持。load 支持 import 支持的大多數 XML 數據選項。可以使用 FROM 子句為 XML 數據指定路徑。在 load 期間可以使用 XMLVALIDATE USING 子句對 XML 數據進行驗證。load 有 3 個不同的選項:XDS、SCHEMA 和 SCHEMALOCATION HINTS。當指定 XDS 選項時,可以使用 DEFAULT, IGNORE 和 MAP 子句。這些選項的含義與 import 中對應選項的含義相同。可以使用文件類型修改器 XMLCHAR 和 XMLGRAPHIC 指定數據的代碼頁。XML 數據指定程序(XML data specifier,XDS)在數據文件中指定 XML 值。load 重啟的行為和原來一樣。它通過掃描所有 XML 文檔重新構建所有索引。

示例代碼 xmlload.db2 演示了 DB2 V9.5 中可用的 XML 數據載入選項。可以在 sqllib/samples/xml/clp 目錄中找到該示例。

#p#

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=" ﹤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數據。

【編輯推薦】

  1. 用DB2 pureXML執行不區分大小寫的高效搜索
  2. PureXML應用之星的發現之旅
  3. 基于pureXML技術的數據庫表結構擴展
責任編輯:book05 來源: ITPUB
相關推薦

2010-08-06 15:14:03

DB2 V9.5 新特

2010-08-27 11:39:19

DB2鎖定新特性

2009-01-18 16:33:09

pureXMLDB2 pureXMLXML

2010-08-20 12:49:49

DB2 pureXML

2011-11-30 21:46:24

ibmdwDB2 pureXML

2009-09-22 12:25:04

ibmdwDB2

2010-08-09 17:52:38

DB2 pureXML

2009-09-25 11:44:00

ibmdwDB2

2009-04-17 10:07:42

2010-09-06 13:19:35

DB2 9.5

2009-11-23 19:57:01

ibmdwDB2

2009-03-03 12:58:14

pureXML大小寫DB2

2010-08-05 09:03:27

DB2 9.5高可用性

2010-07-28 10:22:44

DB2 9.5

2010-02-23 09:39:25

DB2 9.7

2010-08-05 16:08:12

輕松掌握DB2 9.5

2009-03-11 14:59:17

數據庫DB2數據庫分區

2011-05-25 17:05:40

ibmdwDB2

2010-08-03 16:54:10

DB2 9.5

2010-08-03 08:46:23

DB2 9.5高可用性
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 成人福利网站 | 在线成人| 五月天婷婷综合 | 日韩久久在线 | 日韩中文字幕 | 久久夜视频 | 亚洲欧美日韩在线 | 精品国产乱码久久久久久蜜臀 | 亚洲在线| 亚洲国产aⅴ精品一区二区 免费观看av | 国产视频精品视频 | 久久久女女女女999久久 | 欧美精品欧美精品系列 | 桃色五月 | 欧美在线视频一区 | 亚洲女人的天堂 | 久久99精品久久久久婷婷 | 99精品电影 | 国产精品久久久久久久久污网站 | 亚洲精品久 | 中文字幕一区二区三区日韩精品 | www4虎 | 老牛影视av一区二区在线观看 | 成人免费观看男女羞羞视频 | 日韩精品免费视频 | 久久综合久久综合久久综合 | 久久精品亚洲精品国产欧美 | 成人在线免费av | 九九精品影院 | 欧美午夜精品理论片a级按摩 | 欧美日韩一区在线 | 久草免费在线视频 | 日韩欧美在线视频播放 | 久久综合久久综合久久 | 一区二区三区视频免费观看 | 国产91久久久久久久免费 | 国产电影一区二区 | 日韩欧美一区二区三区四区 | 视频二区 | 91大神在线资源观看无广告 | 亚洲午夜视频 |