簡介
Teradata數(shù)據(jù)庫 (以下簡稱TD) 為存儲和處理XML數(shù)據(jù)提供以下支持:
- XML數(shù)據(jù)類型蕊退,允許用戶以緊密二進制形式存儲XML內(nèi)容澳盐,用來保留XML文檔的信息集
- 支持常見XML操作,如解析,驗證,轉(zhuǎn)換(XSLT)和查詢(XPath和XQuery)等和方法
- 用于查詢和轉(zhuǎn)換XML內(nèi)容的XQuery查詢語言
- 存儲過程,允許用戶以XML格式發(fā)布SQL查詢的結果
- 粉碎功能蔫仙,允許用戶從XML文檔中提取值并使用它們來更新數(shù)據(jù)庫表
XML 數(shù)據(jù)類型
TD為XML數(shù)據(jù)提供了XML數(shù)據(jù)類型。你可以像使用其他TD支持的SQL數(shù)據(jù)類型一樣使用它丐箩。它可以保留XML文檔的信息集摇邦,包括從XML驗證派生的層次結構信息和類型信息。XML類型可以存儲最大2GB的XML數(shù)據(jù)雏蛮,并支持XML處理功能涎嚼。
創(chuàng)建新的XML類型實例
你可以通過以下方法創(chuàng)建XML類型實例:
- New 操作符
- CREATEXML 函數(shù)
- XMLPARSE 函數(shù)
例如以下例子,我們假設XML數(shù)據(jù)以文本形式被載入到customerText表的customerXMLText (VARCHAR或者CLOB類型)的列中挑秉。然后我們可以利用New 操作符來從以文本表達的XML數(shù)據(jù)中創(chuàng)建一個XML實例法梯。
SELECT customerID, (NEW XML(customerXMLText)).XMLEXTRACT('/Customer/Address', NULL)
FROM customerText;
查詢的結果如下:
customerID NEW XML(customerXMLText).XMLEXTRACT('/Customer/Address', Null)
-------------------------------------------------------------------------
1 <Address>100 1st Street, San Francisco, CA 94118</Address>
同樣地我們也用用CREATEXML來創(chuàng)建相應實例:
SELECT customerID, (CREATEXML(customerXMLText)).XMLEXTRACT('/Customer/Address', NULL)
FROM customerText;
用法
你可以指定XML類型:
- 在表定義中
注意:XML類型是LOB類型,最多一行占用4096個字節(jié)×⒀疲考慮到一個64K的行大小夜惭,你可以在單個表上定義不超過15個XML類型的列。 - 作為存儲過程中的IN铛绰,OUT或INOUT參數(shù)
- 作為結構化UDT的一部分
INSERT and UPDATE statements can also assign XML type values to columns.
限制
你不能將XML類型指定為:
- UDF或UDM中的輸入?yún)?shù)或結果類型
- 外部存儲過程中的IN诈茧,OUT或INOUT參數(shù)
UDF,UDM和外部存儲過程只能將XML數(shù)據(jù)處理為VARCHAR捂掰,CLOB敢会,VARBYTE或BLOB值; 因此,在將XML值傳遞給外部例程之前这嚣,必須使用XMLSERIALIZE函數(shù)將XML值序列化為VARCHAR鸥昏,CLOB,VARBYTE或BLOB值姐帚。 您可以使用CREATEXML函數(shù)將外部例程的結果轉(zhuǎn)化為XML類型值吏垮。
- XML類型可以容納最大2GB的值。However, operations like XSLT and XQuery are only supported on documents that are smaller in size where the processing operation does not require more memory than specified by the XML_MemoryLimit DBS Control field.
- XML類型的列不能:
- 存在于隊列表中
- 成為索引的一部分
- 參與JOIN操作
- 你不能在依賴于排序或比較的子句中使用XML類型的列罐旗,例如ORDER BY膳汪,GROUP BY或HAVING。
- 你不能在算術表達式中使用XML值九秀。 XML值可以是一個類型遗嗽,如xs:int,可用于算術計算鼓蜒。 在這種情況下媳谁,您可以將XML值轉(zhuǎn)換為適當?shù)腟QL類型來執(zhí)行計算。
- XML類型值不具有可比性友酱,不應在關系比較操作中使用(例如>,<柔纵,=)缔杉。 XML值可以顯式轉(zhuǎn)換為其他標量SQL類型,這些類型的值可能是可比較的搁料。 例如或详,如果已知該值是XML類型xs:int,則可以將其轉(zhuǎn)換為SQL整數(shù)數(shù)據(jù)類型郭计。
注意:因為XML值不具有可比性霸琴,所以它們不包含在對行重復的檢查中(例如,在插入到一個集表中)昭伸。 這種行為類似于也不參與行重復檢查的CLOB / BLOB類型梧乘。
- 盡管XML值的外部表示是字符串類型,但是字符串操作不能直接在XML值上使用。 在應用字符串操作之前选调,可以對XML進行序列化或強制轉(zhuǎn)換以生成字符串表示夹供。
排序
XML值不具有可比性。 在任何依賴比較值(如ORDER BY仁堪,GROUP BY或DISTINCT)的子句中引用XML類型列都會導致錯誤哮洽。
轉(zhuǎn)換
從其他SQL類型轉(zhuǎn)換為XML類型時,an XML value of the nearest xml schema primitive type is created. 弦聂。 例如鸟辅,VARCHAR / CLOB的xs:string和DATE的xs:date。在向另一個方向轉(zhuǎn)換時莺葫,XML實例的字符串值應該與目標數(shù)據(jù)類型兼容匪凉。 例如,將xs:date值轉(zhuǎn)換為SQL DATE類型徙融。
以下數(shù)據(jù)類型支持向和從XML類型轉(zhuǎn)換洒缀。
VARCHAR | CLOB | VARBYTE | BLOB | BYTEINT | SMALLINT
INTEGER | DATE | DECIMAL | FLOAT | NUMBER |BIGINT
TIME | TIME WITH TIMEZONE
TIMESTAMP | TIMESTAMP WITH TIMEZONE
注意:從大對象類型(CLOB和BLOB)轉(zhuǎn)換為XML類型受限于其大小,只有小于64K才能成功轉(zhuǎn)換欺冀。
數(shù)據(jù)遷移
要將存儲在VARCHAR或CLOB列中的XML數(shù)據(jù)遷移到具有XML類型列的等效模式树绩,請執(zhí)行以下操作:
- 驗證XML數(shù)據(jù)是否格式正確,并符合XML格式的規(guī)則隐轩。
- 使用XML類型為保存XML數(shù)據(jù)的列創(chuàng)建新版本的表饺饭。
- 使用NEW XML運算符或CREATEXML函數(shù)將XML文本插入到XML列中。
范例
該語句創(chuàng)建一個包含XML類型列customerXML的表:
CREATE TABLE customer (
customerID INTEGER,
customerName VARCHAR(256),
customerXML XML
) PRIMARY INDEX (customerID);