IBM Books

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

XML 文書の分解

XML エクステンダーには XML 文書を分解するための 2 つのストアード・プロシージャー、 dxxShredXML() および dxxInsertXML が備わっています。

dxxShredXML()
このストアード・プロシージャーは、頻繁に更新されるアプリケーション、 または XML を管理するためのオーバーヘッドを回避したいアプリケーションのために使用されます。 ストアード・プロシージャー dxxShredXML() では、使用可能にされたコレクションは必要ありません。 代わりにそれは DAD ファイルを使用します。

ストアード・プロシージャー dxxShredXML() は、 DAD ファイルおよび分解する XML 文書の 2 つを入力パラメーターとします。 それは戻りコードと戻りメッセージの 2 つを出力パラメーターとして戻します。

ストアード・プロシージャー dxxShredXML() は、 DAD ファイル内の <Xcollection> 指定に応じて、 XML 文書を XML コレクションに挿入します。 DAD ファイル内の <Xcollection> で使用される表は存在することが想定され、 列は DAD マッピングで指定されるデータ・タイプに適合することが想定されます。 それ以外の場合、エラー・メッセージが戻されます。 ストアード・プロシージャー dxxShredXML() はその後、XML 文書を分解して、 タグのない XML データを DAD ファイル内で指定された表に挿入します。

合成のための対応するストアード・プロシージャーは dxxGenXML() です。 これはさらに、DAD を入力パラメーターとして取り、 XML コレクションが使用可能になっていることを必要としません。

XML コレクションを分解する: dxxShredXML()

以下のストアード・プロシージャー宣言を使用して、 ストアード・プロシージャー呼び出しをアプリケーションに組み込みます。

dxxShredXML(CLOB(100K)    DAD,            /* input */
            CLOB(1M)      xmlobj,         /* input */
            long          returnCode,     /* output */
            varchar(1024) returnMsg)      /* output */

完全な構文および例については、dxxShredXML() を参照してください。

例: dxxShredXML() への呼び出しの例を以下に示します。

#include "dxx.h"
#include "dxxrc.h"
 
EXEC SQL INCLUDE SQLCA;
        EXEC SQL BEGIN DECLARE SECTION;
         SQL TYPE is CLOB      dad;             /* DAD*/
         SQL TYPE is CLOB_FILE dadFile;         /* DAD file*/
         SQL TYPE is CLOB      xmlDoc;          /* input XML document */
         SQL TYPE is CLOB_FILE xmlFile;          /* input XML file */
         long                  returnCode;       /* error code */
         char                  returnMsg[1024];  /* error message text */
         short                 dad_ind;
         short                 xmlDoc_ind;
         short                 returnCode_ind;
         short                 returnMsg_ind;
        EXEC SQL END DECLARE SECTION;
        /* initialize host variable and indicators */
        strcpy(dadFile.name,"c:\dxx\samples\dad\getstart_xcollection.dad");
        dadFile.name_length=strlen("c:\dxx\samples\dad\getstart_xcollection.dad");
        dadFile.file_option=SQL_FILE_READ;
        strcpy(xmlFile.name,"c:\dxx\samples\cmd\getstart_xcollection.xml");
        xmlFile.name_length=strlen("c:\dxx\samples\cmd\getstart_xcollection.xml");
        xmlFile.file_option=SQL_FILE_READ;
        SQL EXEC VALUES (:dadFile) INTO :dad;
        SQL EXEC VALUES (:xmlFile) INTO :xmlDoc;
        returnCode = 0;
        returnMsg[0] = '\0';
        dad_ind = 0;
        xmlDoc_ind = 0;
        returnCode_ind = -1;
        returnMsg_ind = -1;
        /* Call the store procedure */
        EXEC SQL CALL db2xml!dxxShredXML(:dad:dad_ind;
                     :xmlDoc:xmlDoc_ind,
                     :returnCode:returnCode_ind,:returnMsg:returnMsg_ind);

dxxInsertXML()
このストアード・プロシージャーは、 定期的な更新を行うアプリケーションのために使用されます。 同じタスクが繰り返されるので、パフォーマンスの改善が重要になります。 XML コレクションを使用可能にして、 ストアード・プロシージャー内でコレクション名を使用すると、パフォーマンスが改善されます。 ストアード・プロシージャー dxxInsertXML() は dxxShredXML() と同様の働きをしますが、 dxxInsertXML() は使用可能にされた XML コレクションを最初の入力パラメーターとして取ります。

ストアード・プロシージャー dxxInsertXML() は XML 文書を DAD ファイルに関連した、 使用可能にされた XML コレクションに挿入します。 DAD ファイルには、コレクション表およびマッピングの指定が含まれています。 コレクション表は、<Xcollection> での指定に応じて検査または作成されます。 ストアード・プロシージャー dxxInsertXML() はその後、マッピングに従って XML 文書を分解し、 タグのない XML データを、名前の指定された XML コレクションに挿入します。

合成のための対応するストアード・プロシージャーは dxxRetrieveXML() です。 これはさらに、使用可能にされた XML コレクションの名前を取ります。

XML コレクションを分解する: dxxInsertXML()

以下のストアード・プロシージャー宣言を使用して、 ストアード・プロシージャー呼び出しをアプリケーションに組み込みます。

dxxInsertXML(char(UDB_SIZE) collectionName,   /* input */
             CLOB(1M)       xmlobj,           /* input */
             long           returnCode,       /* output */
             varchar(1024)  returnMsg)        /* output */

完全な構文および例については、dxxInsertXML() を参照してください。

例: dxxInsertXML() への呼び出しの例を以下に示します。

#include "dxx.h"
#include "dxxrc.h"
 
EXEC SQL INCLUDE SQLCA;
        EXEC SQL BEGIN DECLARE SECTION;
         char                  collection[64];   /* name of an XML collection */
         SQL TYPE is CLOB_FILE xmlFile;          /* input XML file */
         SQL TYPE is CLOB      xmlDoc;           /* input XML doc */
         long                  returnCode;       /* error code */
         char                  returnMsg[1024];  /* error message text */
         short                 collection_ind;
         short                 xmlDoc_ind;
         short                 returnCode_ind;
         short                 returnMsg_ind;
         EXEC SQL END DECLARE SECTION;
         /* initialize host variable and indicators */
         strcpy(collection,"sales_ord")
         strcpy(xmlobj.name,"c:\dxx\samples\cmd\getstart_xcollection.xml");
         xmlobj.name_length=strlen("c:\dxx\samples\cmd\getstart_xcollection.xml");
         xmlobj.file_option=SQL_FILE_READ;
         SQL EXEC VALUES (:xmlFile) INTO (:xmlDoc);
         returnCode = 0;
         returnMsg[0] = '\0';
         collection_ind = 0;
         xmlobj_ind = 0;
         returnCode_ind = -1;
         returnMsg_ind = -1;
 
         /* Call the store procedure */
         EXEC SQL CALL db2xml!dxxInsertXML(:collection:collection_ind;
                      :xmlDoc:xmlDoc_ind,
                      :returnCode:returnCode_ind,:returnMsg:returnMsg_ind);


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