Hitachi

ノンストップデータベース HiRDB Version 10 UAP開発ガイド


2.12.2 XML型の場合

ここでは,HiRDB XML Extensionを使用した例について説明します。HiRDB XML Extensionが提供する抽象データ型関数については,マニュアル「HiRDB SQLリファレンス」を参照してください。

この項では,書籍情報をXML文書で管理する例について説明します。

例題で使用している表は,マニュアル「HiRDB システム導入・設計ガイド」のデータベースの作成(プラグインが提供する抽象データ型を含む表の場合)で定義している表を利用しています。

〈この項の構成〉

(1) 検索

(a) XML型の場合の検索例(その1)

XML型の場合の検索例として,書籍IDが126513592である書籍情報をVARCHAR型の値として取り出す例を次の図に示します。検索をするSQL文は,次のように記述できます。

SELECT 書籍ID, XMLSERIALIZE(書籍情報 AS VARCHAR(32000))
    FROM 書籍管理表
    WHERE 書籍ID = 126513592
図2‒52 XML型の場合の検索例(その1)

[図データ]

(b) XML型の場合の検索例(その2)

XQuery式による評価結果の取り出しをします。XML型の場合の検索例として,カテゴリが"データベース"である書籍のタイトルを取り出す例を次の図に示します。検索をするSQL文は,次のように記述できます。

  SELECT 書籍ID,
         XMLSERIALIZE(
           XMLQUERY('/書籍情報/タイトル'
                     PASSING BY VALUE 書籍情報
                     RETURNING SEQUENCE EMPTY ON EMPTY)
           AS VARCHAR(32000))
    FROM 書籍管理表
    WHERE XMLEXISTS('/書籍情報[カテゴリ="データベース"]'
                     PASSING BY VALUE 書籍情報)
[説明]

XMLQUERY関数を使用して,XQuery式を評価した結果を取り出します。XQuery式の評価結果が空のシーケンスである行を出力しないように,XMLEXISTS述語を使用します。

図2‒53 XML型の場合の検索例(その2)

[図データ]

(c) XML型の場合の検索例(その3)

XML型の値を一つのXML型の値として出力します。XML型の場合の検索例として,カテゴリが"データベース"である書籍のタイトルを結合して取り出す例を次の図に示します。検索をするSQL文は,次のように記述できます。

SELECT XMLSERIALIZE(
         XMLAGG(
           XMLQUERY('/書籍情報/タイトル'
                      PASSING BY VALUE 書籍情報
                      RETURNING SEQUENCE EMPTY ON EMPTY)
         )
         AS VARCHAR(32000))
       FROM 書籍管理表
       WHERE XMLEXISTS('/書籍情報[カテゴリ="データベース"]'
                       PASSING BY VALUE 書籍情報)
[説明]

各行のXML型の値を一つのXML型の値として出力するには,XMLAGG集合関数を使用します。

図2‒54 XML型の場合の検索例(その3)

[図データ]

(d) XML型の場合の検索例(その4)

XML型の値を一つのXML型の値として,その値に対してXQuery式を評価します。XML型の場合の検索例として,タイトルが"SQL徹底解説"の書籍情報とカテゴリが同じ書籍の書籍情報を取り出す例を次の図に示します。検索をするSQL文は,次のように記述できます。

SELECT
  XMLSERIALIZE(
    XMLQUERY(
      '$BOOKS/書籍情報[カテゴリ=$BOOKS/書籍情報[タイトル="SQL徹底解説"]/カテゴリ]'
      PASSING BY VALUE XMLAGG(書籍情報) AS BOOKS
      RETURNING SEQUENCE EMPTY ON EMPTY))
    AS VARCHAR(32000))
  FROM 書籍管理表
図2‒55 XML型の場合の検索例(その4)

[図データ]

(e) XML型の場合の検索例(その5)

部分構造インデクスを使用した検索をします。書籍情報中のカテゴリ要素をVARCHAR型としてキーにするインデクスの定義例を次に示します。

部分構造インデクスの定義例
CREATE INDEX INDX1 ON 書籍管理表(書籍情報)
  IN (RDAREA02) KEY FROM '/書籍情報/カテゴリ' AS VARCHAR(100)

このインデクスを利用することで,次のSQLの場合は行の絞り込みの処理時間が削減できます。書籍管理表から,カテゴリが"ネットワーク"である書籍情報を取り出す例を次に示します。

部分構造インデクスを使用した検索例
SELECT 書籍ID,
       XMLSERIALIZE(書籍情報 AS VARCHAR(32000))
  FROM 書籍管理表
  WHERE XMLEXISTS('/書籍情報[カテゴリ="ネットワーク"]'
                  PASSING BY VALUE 書籍情報)

(f) XML型の場合の検索例(その6)

XML型全文検索用インデクスを使用した検索をします。書籍情報列に対するXML型全文検索用インデクスの定義例を次に示します。

XML型全文検索用インデクスの定義例
CREATE INDEX INDX1
  USING TYPE IXXML ON 書籍管理表(書籍情報)
  IN (LOBAREA01)

このインデクスを利用することで,次のSQLの場合は行の絞り込みの処理時間が削減できます。書籍管理表から,説明に"RDBMS"を含む書籍情報を取り出す例を次に示します。

XML型全文検索用インデクスを使用した検索例
SELECT 書籍ID,
       XMLSERIALIZE(書籍情報 AS VARCHAR(32000))
  FROM 書籍管理表
  WHERE XMLEXISTS('/書籍情報/説明/text()[contains( . ,"RDBMS")]'
                   PASSING BY VALUE 書籍情報)