首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> DB2 資料庫 >> DB2 教學

DB2 基礎入門:SQL/XML 發布函數全解析——從關聯數據輕鬆生成 XML 文檔

     編輯:DB2 教學

前言:SQL/XML 標準與 DB2 內建函數

XML (eXtensible Markup Language) 是發布、儲存、共享結構化文檔的通用數據格式,用於電腦間數據交換。標記後文本按節點類型分類:「document」「element」「attribute」「text」等。「Namespaces」與節點名關聯(元素、屬性)。

SQL/XML 是 SQL 語言標準 (ANSI/ISO) 的擴展,包含將關聯數據轉換成 XML 的發布函數。IBM DB2 UDB for Linux/UNIX/Windows 內建 SQL/XML 發布函數,輕鬆將 DB2 數據發布為 XML 文檔。這些函數允許在大型字符對象 (CLOB) 中創建帶標記 XML 文檔。可用 SELECT 組裝所需 XML 節點,輸出導向文件捕獲標記節點;也可用 INSERT 將生成文本插入表中。

七大 SQL/XML 發布函數

DB2 UDB V8.2 支援:XMLSERIALIZE、XMLELEMENT、XMLFOREST、XMLATTRIBUTES、XMLCONCAT、XMLAGG、XMLNAMESPACES。本文逐一介紹,範例以 XML 表格元素為主,需連接 SAMPLE 資料庫(無則命令行執行 db2sampl 創建)。所有範例均使用 XMLSERIALIZE 序列化輸出。

1. XMLSERIALIZE:XML 值轉字符串

類型轉換函數,返回 CHAR/VARCHAR/CLOB。參數必須是 XML 數據類型表達式。XML 為內部表示,只能作接收此類型函數的輸入,屬中間類型,不可存入資料庫。

2. XMLELEMENT:構造命名 XML 元素節點

標量函數,返回 XML 類型。參數:元素名、可選命名空間聲明、可選屬性、零或多個構成元素內容的表達式。可嵌套。
範例:從 EMPLOYEE、DEPARTMENT 表生成 XML 表格行(<tr>)與單元格(<td>)。

SELECT XMLSERIALIZE(
  CONTENT XMLELEMENT(
    NAME "tr",
    XMLELEMENT(NAME "td", e.empno),
    XMLELEMENT(NAME "td", e.firstnme),
    XMLELEMENT(NAME "td", e.lastname),
    XMLELEMENT(NAME "td", e.phoneno),
    XMLELEMENT(NAME "td", d.deptno),
    XMLELEMENT(NAME "td", SUBSTR(d.deptname, 1, 24))
  ) AS CLOB(120)
) AS "result"
FROM employee e, department d
WHERE e.workdept = d.deptno AND YEAR(hiredate) < 1970;

輸出序列化後可插入 XML 文檔(表 1)。

3. XMLFOREST:構造 XML 元素節點序列(森林)

標量函數,返回值與參數同為內部 XML 類型。在 XMLELEMENT 中嵌套使用,一次調用生成嵌套在 <tr> 中的多個 <td>。
範例:

SELECT XMLSERIALIZE(
  CONTENT XMLELEMENT(
    NAME "tr",
    XMLFOREST(
      e.empno AS "td",
      e.firstnme AS "td",
      e.lastname AS "td",
      e.phoneno AS "td",
      d.deptno AS "td",
      d.deptname AS "td"
    )
  ) AS CLOB(144)
) AS "result"
FROM employee e, department d
WHERE e.workdept = d.deptno AND YEAR(hiredate) < 1970;

輸出見表 2。

4. XMLATTRIBUTES:為 XML 元素構造屬性節點

標量函數,返回 XML 類型。結合 XMLELEMENT 為生成的 <td> 添加對齊屬性 align="center"。
範例:

SELECT XMLSERIALIZE(
  CONTENT XMLELEMENT(
    NAME "tr",
    XMLELEMENT(NAME "td", XMLATTRIBUTES('center' AS "align"), e.empno),
    XMLELEMENT(NAME "td", e.firstnme),
    XMLELEMENT(NAME "td", e.lastname),
    XMLELEMENT(NAME "td", XMLATTRIBUTES('center' AS "align"), e.phoneno),
    XMLELEMENT(NAME "td", XMLATTRIBUTES('center' AS "align"), d.deptno),
    XMLELEMENT(NAME "td", SUBSTR(d.deptname, 1, 24))
  ) AS CLOB(180)
) AS "result"
FROM employee e, department d
WHERE e.workdept = d.deptno AND YEAR(hiredate) < 1970;

輸出片段見表 3。

5. XMLCONCAT:連接兩個或多個 XML 值

標量函數,返回值與參數同為內部 XML 類型。連接生成的兩個 <td> 元素。
範例:

SELECT XMLSERIALIZE(
  CONTENT XMLELEMENT(
    NAME "tr",
    XMLCONCAT(
      XMLELEMENT(NAME "td", firstnme),
      XMLELEMENT(NAME "td", lastname)
    )
  ) AS CLOB(48)
) AS "result"
FROM employee ORDER BY lastname;

輸出見表 4。

6. XMLAGG:聚合 XML 值為一系列項

聚合(列)函數。對每個 <tr> 實例聚合三個 <td>。
範例:

SELECT XMLSERIALIZE(
  CONTENT XMLELEMENT(
    NAME "tr", XMLATTRIBUTES(workdept AS "id"),
    XMLAGG(XMLELEMENT(NAME "td", lastname) ORDER BY lastname)
  ) AS CLOB(72)
) AS "result"
FROM employee GROUP BY workdept HAVING COUNT(*) = 3;

輸出見表 5:按部門聚合員工姓氏。

7. XMLNAMESPACES:構造 XML 命名空間聲明

標量函數,返回 XML 類型。聲明作用於 XMLELEMENT/XMLFOREST 生成元素範圍內。用於限定元素/屬性名,關聯特定 URI,避免應用處理相似標記屬性時誤解。
範例:嵌套在 <td>、<tr> 中的 <emp> 節點,設定無預設命名空間(XMLNS="")。

SELECT XMLSERIALIZE(
  CONTENT XMLELEMENT(
    NAME "tr",
    XMLELEMENT(
      NAME "td",
      XMLELEMENT(
        NAME "emp",
        XMLNAMESPACES(NO DEFAULT),
        lastname
      )
    )
  ) AS CLOB(48)
) AS "result"
FROM employee ORDER BY lastname;

輸出片段見表 6。

結語

DB2 UDB 內建 SQL/XML 發布函數可從關聯數據生成帶標記 XML 文檔。本文介紹類型轉換、標量、聚合三類函數,提供可運行實例。掌握這些函數,即可靈活構建各類 XML 輸出,滿足數據交換與發布需求。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved