XML 文書を DB2 データベースに保管するには、 1 つの列を XML に関して使用可能にする必要があります。 列を使用可能して索引付けできるようにすると、すばやく検索することができます。 列を使用可能にするには、XML エクステンダー管理ウィザードまたは DB2 コマンド・シェルを使用します。 列のタイプは XML でなければなりません。
XML エクステンダーが XML 列を使用可能にすると、XML エクステンダーは以下の操作を行います。
XML 列が使用可能になったら、以下のことを行うことができます。
XML UDT の列を含む DB2 表を作成または更新することによって、XML 表を作成します。
XML 列を使用可能にするには、以下のステップに従います。
SALES_TAB
ORDER列のタイプは XML でなければなりません。
c:\dxx\samples\dad\getstart.dad
表スペースには XML エクステンダーの作成したサイド表が含まれます。 表スペースが指定されている場合、 サイド表は指定された表スペースの中に作成されます。 表スペースが指定されていない場合、サイド表はデフォルト表スペースの中に作成されます。
指定される場合、デフォルト視点は、列が使用可能になるときに自動的に作成され、 XML 表と関連するすべてのサイド表を結合します。
XML エクステンダーはすべてのサイド表をアプリケーション表に関連付けるために、 一意的な識別子としてルート ID の値を使用します。 これが指定されていない場合、 XML エクステンダーは DXXROOT_ID 列をアプリケーション表に追加して識別子を生成します。
XML 列を使用可能にするには、以下のようなコマンドを入力します。
構文:
dxxadm enable_column |
---|
>>-dxxadm---enable_column---dbName---tbName---colName-----------> >----DAD_file----+-----------------+---+-------------------+----> '--t--tablespace--' '--v--default_view--' >-----+--------------+----------------------------------------->< '--r--root_id--' |
パラメーター:
制限: アプリケーション表の列名の 1 つが DXXROOT_ID で、 この列に root_id の値が入っていない場合は、 ユーザーが root_id パラメーターを指定しなければなりません。 こうしないとエラーが発生します。
例: 以下の例では、 DB2 コマンド・シェルを使用して列を使用可能にします。 この DAD ファイルおよび XML 文書は、付録 B, サンプルに出ています。
dxxadm enable_column SALES_DB sales_tab order getstart.dad -v sales_order_view -r invoice_num
この例では、列 ORDER が表 SALES_DB.SALES_TAB 内で使用可能になります。 DAD ファイルは getstart.dad、 デフォルト視点は sales_order_view、ルート ID は INVOICE_NUM です。
この例を使用すると、表 SALES_TAB のスキーマは次のとおりです。
列名 | INVOICE_NUM | SALES_PERSON | ORDER |
---|---|---|---|
データ・タイプ | CHAR(6) | VARCHAR(20) | XMLVARCHAR |
DAD 指定に基づいて、以下のサイド表が作成されます。
ORDER_SIDE_TAB:
列名 | ORDER_KEY | CUSTOMER | INVOICE_NUM |
---|---|---|---|
データ・タイプ | INTEGER | VARCHAR(50) | CHAR(6) |
パス式 | /Order/@key | /Order/Customer/Name | N/A |
PART_SIDE_TAB:
列名 | PART_KEY | PRICE | INVOICE_NUM |
---|---|---|---|
データ・タイプ | INTEGER | DOUBLE | CHAR(6) |
パス式 | /Order/Part/@key | /Order/Part/ExtendedPrice | N/A |
SHIP_SIDE_TAB:
列名 | DATE | INVOICE_NUM |
---|---|---|
データ・タイプ | DATE | CHAR(6) |
パス式 | /Order/Part/Shipment/ShipDate | N/A |
すべてのサイド表には同じタイプの列 INVOICE_NUM があります。 これは、アプリケーション表の基本キー INVOICE_NUM によってルート ID が指定されているためです。 列が使用可能になった後、INVOICE_NUM の値がサイド表に挿入されます。 XML 列 ORDER を使用可能にする際に default_view パラメーターを指定したため、 デフォルト視点 sales_order_view が作成されます。 この視点は、以下のステートメントを使って上記の表をすべて結合します。
CREATE VIEW sales_order_view(invoice_num, sales_person, order, order_key, customer, part_key, price, date) AS SELECT sales_tab.invoice_num, sales_tab.sales_person, sales_tab.order, order_tab.order_key, order_tab.customer, part_tab.part_key, part_tab.price, ship_tab.date FROM sales_tab, order_tab, part_tab, ship_tab WHERE sales_tab.invoice_num = order_tab.invoice_num AND sales_tab.invoice_num = part_tab.invoice_num AND sales_tab.invoice_num = ship_tab.invoice_num
enable_column コマンドによって表スペースが指定されている場合、 サイド表は指定された表スペースの中に作成されます。 表スペースが指定されていない場合、 サイド表はデフォルト表スペースの中に作成されます。