XQueryによるDB2 XMLデータのクエリ
XQueryについて
XQueryはSQLと多くの重要な点で異なりますが、その理由の大部分は、この2つの言語が異なる特性を持つ2つのデータモデル向けに設計されているためです。XML ドキュメントには階層的な構造があり、固有の順序があります。SQL ベースのデータベース管理システムがサポートする表形式のデータ構造は、フラットでコレクションベースであるため、行の間に順序はありません。
この2つのデータモデルの違いは、それぞれのクエリー言語の根本的な違いにつながります。例えば、XQueryはプログラマーがXML階層を移動できるようにパス式をサポートしていますが、純粋なSQL(XML拡張なし)はサポートしていません。XQueryは型付きデータと型無しデータの両方をサポートしますが、SQLデータは常に指定された型で定義されます。XMLドキュメントではデータの欠落や不明な点を無視するため、xQueryにはヌル値がありません。XQuery は XML データの範囲を返しますが、SQL は様々な SQL データ型の結果セットを返します。
これは、XQueryとSQLの基本的な違いのほんの一例です。網羅的なリストを提供することはこの記事の範囲外ですが、近日発売の IBM Systems Journal では、これらの言語の違いについてより詳細に説明する予定です。とりあえず、XQuery 言語の基本的な側面を探り、DB2 Viper で XML データをクエリするためにどのように使用できるかを見てみましょう。
サンプルデータベース
この記事のクエリーは、「"DB2 Viper Quick Start" (developerWorks, April 2006)」で作成したサンプルテーブルにアクセスするものです。リスト 1 は、サンプルデータベースの "items" と "clients" テーブルの定義を示したものです。
リスト1. テーブルの定義
テーブルitemsを作成します。
id int primary key not null,
ブランド名 varchar(30),
itemname varchar(30)。
sku int,
srp decimal(7,2),
コメント xml
)
テーブルclients() を作成します。
id int primary key not null,
name varchar(50)。
status varchar(10)。
連絡先情報 xml
)
図1は"items.comments"カラムに含まれるXMLデータの例、図2は"clients.contactinfo"カラムに含まれるXMLデータの例を示しています。以降のクエリ例では、これらのXML文書の一方または両方の特定の要素を参照することになります。
図1. items" テーブルの "comments" カラムに格納された XML ドキュメントのサンプル。
図2. clients" テーブルの "contactinfo" カラムに格納された XML ドキュメントのサンプル
クエリ環境
この記事にあるクエリはすべて対話式で発行されます。これは DB2 Control Center の DB2 Command Line Processor または DB2 Command Editor を使って行うことができます。本書の画面イメージや説明では、主に後者の方法を使用しています。(DB2 Viper には、プログラマーがグラフィカルにクエリを作成できる Eclipse ベースの Developer Workbench も付属しています。(アプリケーション開発の問題点や Developer Workbench については、ここでは触れません)。
DB2 コマンドエディタを使用するには、Control Center を起動し、Tools -> Command Editor を選択し、図 3 のウィンドウを表示します。上のパネルにクエリを入力し、左上の緑色の矢印をクリックしてクエリを実行すると、下のパネルまたはクエリ結果タブで出力を確認することができます。
図3. DB2 Control Center から起動できる DB2 コマンドエディタ
XQueryの例
DB2 XML データを SQL で照会する」 と同様に、この記事では、一般的なビジネスシナリオを説明し、XQuery を使用して XML データへの要求を満たす方法を紹介します。また、この記事では、XQuery に SQL を埋め込む必要がある、より複雑なシナリオについても説明します。
XQueryには、自由に組み合わせることができる様々なタイプの式が用意されています。各式は、他の式の入力として使用できる値のセットを返します。最も外側の式の結果が、クエリの結果となります。
この記事では、2 つの重要な XQuery 式、すなわち "FLWOR" 式と path 式を取り上げます。これは、複数の項目からなるリストを繰り返し処理するために使用され、オプションとして各項目で演算して得られた値を返します。パス式は、階層化されたXML要素間を移動し、パスの終点で見つかった要素を返します。
SQLのSELECT-FROM-WHERE式と同様に、XQueryのFLWOR式はキーワードで始まる複数の節を含むことができます。以下のキーワードは、FLWOR 式の句の先頭として使用されます。
- forを使用します。入力シーケンスを繰り返し、各入力アイテムに順番に変数をバインドします。
- let: 変数を宣言し、代入する(複数の項目を持つリストの場合もある)。
- where: クエリ結果をフィルタリングするための条件を指定します。
- order by: 結果のソート順を指定します。
- return: 返される結果を定義します。
多くの場合、FLWOR式やパス式を用いて、クエリを任意に記述することができる。
DB2 XQueryをトップレベルのクエリ言語として使用する
DB2 Viper で XQuery を (SQL 文に埋め込むのではなく) 直接実行するには、クエリの先頭にキーワード xquery を指定する必要があります。このキーワードは、DB2 の XQuery パーサを起動してリクエストを処理するように指示します。これは、XQuery を一番外側 (トップレベル) の言語として使用する場合のみ必要であることに注意してください。XQuery 式を SQL に埋め込んでいる場合は、文の前に xquery キーワードを付ける必要はありません。ただし、この記事では XQuery を基本言語として使用しているため、すべてのクエリの前に xquery を付けています。
XQueryをトップレベル言語として使用する場合、入力データのソースが必要です。XQueryが入力データを取得する方法の1つは、DB2テーブルのXMLカラムが存在するテーブル名とそのカラム名を示す1つの引数でdb2-fn:xmlcolumnという関数を呼ぶことです。db2-fn:xmlcolumn関数は与えられたテーブルに格納されているXMLドキュメントを返します。
関連
-
解決する db2トランザクションログがいっぱいで、ログのディスク容量がいっぱいです問題の詳細な解決方法
-
DB2 SELECT ステートメントの高度な使用法
-
DB2コモンコマンドクイックリファレンス(メモ)
-
DB2 9 製品マニュアル オンラインリファレンスアドレス (http)
-
シェルによるdb2データの抽出と更新
-
DB2アクティビティログフルの原因を分析し、DB2ログフルの方法と回避策を解決します。
-
DB2 のデッドロック解決プロセスが完全に文書化されています。
-
DB2 自動インクリメントフィールドの実装方法
-
DB2 9 (Viper)クイックスタート
-
DB2 より一般的で実用的なSQL文のまとめ
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
DB2のINSERTパフォーマンスを向上させるためのヒント (1)
-
DB2プログラミングのヒント
-
SQL Server Connection Server を使用して DB2 Server にアクセスする
-
DB2 における REVERSE 関数の実装
-
DB2 現在のユーザーテーブル、フィールド、インデックスなどの詳細を取得します。
-
SQL Server 2008 Management Studio Expressのインストール方法
-
DB2マイルストーン
-
IBM DB2 Connectの紹介(1)
-
DB2 9 データサーバーの開発(全3回
-
DB2 9 と DB2 V8.x の XML 機能を比較する