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