IBM Books

管理およびプログラミングの手引き

文書全体を取り出す

タスクの概説:

  1. XML 文書を XML 表に保管したことを確認して、取り出したいデータを決めます。
  2. DB2 表内のデータを取り出すための方式 (キャスト関数または UDF) を選択します。
  3. 多重定義 Content() を使用する場合、UDF は取り出すデータに関連したデータ・タイプ、 およびエクスポートされるデータ・タイプを判別することになります。
  4. XML 文書の検索元となる XML 表および列を指定する SQL 照会を指定します。

XML エクステンダーには、データを取り出すための 2 つの方法が備わっています。

デフォルト・キャスト関数を使用する
UDT が XML UDT を SQL 基本タイプに変換して、その後それを処理するための、 DB2 に備わっているデフォルト・キャスト関数を使用します。 XML エクステンダーに備わっているキャスト関数を SELECT ステートメント内で使用して、 データを取り出すことができます。 表 12 は、備わっているキャスト関数を示しています。


表 12. XML エクステンダーのデフォルト・キャスト関数
SELECT 文節内で使用されるキャスト 戻りタイプ 説明
varchar(XMLVARCHAR) VARCHAR VARCHAR による XML 文書
clob(XMLCLOB) CLOB CLOB による XML 文書
varchar(XMLFile) VARCHAR VARCHAR による XML ファイル名

例: 以下の例では、XMLVARCHAR を取り出し、 VARCHAR データ・タイプとしてメモリーに保管します。

EXEC SQL SELECT db2xml.varchar(order) from sales_tab

Content() 多重定義 UDF を使用する
Content() UDF を使用して、外部記憶装置から文書内容を取り出してメモリーに入れるか、 または内部記憶装置から文書をエクスポートして DB2 サーバー上の 外部ファイル に入れます。

たとえば、XML 文書を XMLFILE として保管していて、 メモリー内でそれを処理したい場合、Content() UDF を使用することができます。 それは XMLFILE データ・タイプを入力として、CLOB を戻します。

Content() UDF は、指定されたデータ・タイプに応じて 2 つの異なる検索機能を実行します。 それは次のとおりです。

外部記憶装置から文書を取り出して、メモリーに入れる
文書が外部ファイルとして保管されている場合、 Content() を使用して XML 文書を取り出し、 それをメモリー・バッファーまたは CLOB ロケーターに入れることができます。 以下の関数構文を使用します。 ここで、xmlobj は照会されている XML 列です。

XMLFILE から CLOB へ: ファイルからデータを取り出して、 CLOB ロケーターにエクスポートします。

Content(xmlobj XMLFile)

内部記憶装置から文書を取り出して、それを外部ファイルにエクスポートする
さらに、Content() を使用して、DB2 内に保管された XML 文書を取り出し、 データベース・サーバーのファイル・システム上にあるファイルにエクスポートすることができます。 それは、VARCHAR タイプのファイルの名前を戻します。 以下の関数構文を使用します。 ここで、xmlobj は照会されている XML 列で、filename は外部ファイルです。 XML タイプは、XMLVARCHAR または XMLCLOB データ・タイプとすることができます。

XML タイプ から外部ファイルへ: XML データ・タイプとして保管されている XML の内容を取り出して、 外部ファイルにエクスポートします。

Content(xmlobj XML type, filename varchar(512))

ここで、

xmlobj
XML 内容が取り出される XML 列の名前です。 xmlobj はタイプ XMLVARCHAR または XMLCLOB です。

filename
XML データを保管するファイルの名前です。

下記の例では、組み込み SQL のある小さな C プログラムの一部によって、 どのようにして XML 文書がファイルから取り出されてメモリーに入れられるかを示しています。 この例では、列 BOOK は XMLFILE タイプであると想定します。

EXEC SQL BEGIN DECLARE SECTION;
              SQL TYPE IS CLOB_LOCATOR xml_buff;
          EXEC SQL END DECLARE SECTION;
          EXEC SQL CONNECT TO SALES_DB
          EXEC SQL DECLARE c1 CURSOR FOR
              SELECT Content(order) from sales_tab
                        EXEC SQL OPEN c1;
          do {
             EXEC SQL FETCH c1 INTO :xml_buff;
             if (SQLCODE != 0) {
                break;
                }
             else {
               /* do whatever you need to do with the XML doc in buffer */
               }
             }
          EXEC SQL CLOSE c1;
          EXEC SQL CONNECT RESET;


[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]