目的
合成と分解の両方で同じ DAD ファイルを使用できるようにします。 また、分解された XML 文書を、 ストアード・プロシージャー dxxRetrieveXML() を使って取り出すこともできます。 dxxRetrieveXML() は入力として DAD ファイルを含むバッファー、 作成される結果表の名前、および戻される行の最大数を取ります。 また結果セット (結果表)、結果セット内の実際の行数、 およびエラー・コードとメッセージ・テキストを戻します。
動的照会をサポートするために、 dxxRetrieveXML() は入力パラメーター override を取ります。 入力 overrideType に基づいて、 アプリケーションは DAD ファイル内の SQL マッピングの SQL_stmt、 または RDB_node 内の RDB_node マッピング条件をオーバーライドできます。 入力パラメーター overrideType を使用して、 override のタイプを明示します。 override パラメーターについての詳細は、DAD ファイル内の値を動的にオーバーライドするを参照してください。
dxxRetrieveXML() を使用するための DAD ファイルの要件は、 dxxGenXML() を使用する場合の要件と同じです。 唯一の違いとして、dxxRetrieveXML() の入力パラメーターは DAD ではなく、 使用可能な XML コレクションの名前です。
dxxRetrieveXML(char(UDB_SIZE) collectionName, /* input */ char(UDB_SIZE) resultTabName, /* input */ integer overrideType, /* input */ varchar(1024) override, /* input */ integer maxRows, /* input */ integer numRows, /* output */ long returnCode, /* output */ varchar(1024) returnMsg) /* output */
パラメーター
パラメーター | 説明 | IN/OUT パラメーター |
---|---|---|
collectionName | 使用可能な XML コレクションの名前 | IN |
resultTabName | 結果表の名前。これは呼び出しの前にすでに存在しなければなりません。 この表には、XMLVARCHAR または XMLCLOB のいずれかのタイプの列を 1 つだけ含めます。 | IN |
overrideType | 下記の override パラメーターのタイプを示すフラグ
| IN |
override | DAD ファイル内の条件をオーバーライドします。
入力値は overrideType に応じて次のとおりです。
| IN |
maxRows | 結果表の行の最大数 | IN |
numRows | 結果表に実際に生成された行の数 | OUT |
returnCode | ストアード・プロシージャーからの戻りコード | OUT |
returnMsg | エラー発生時に戻されるメッセージ・テキスト | OUT |
例
以下は dxxRetrieveXML() の呼び出しの例です。 この例では XML_ORDER_TAB という名前の結果表が作成され、 XMLVARCHAR タイプの 1 つの列がその表に含まれます。
#include "dxx.h" #include "dxxrc.h" EXEC SQL INCLUDE SQLCA; EXEC SQL BEGIN DECLARE SECTION; char collection[32]; /* dad buffer */ char result_tab[32]; /* name of the result table */ char override[2]; /* override, will set to NULL*/ short overrideType; /* defined in dxx.h */ short max_row; /* maximum number of rows */ short num_row; /* actual number of rows */ long returnCode; /* return error code */ char returnMsg[1024]; /* error message text */ short dadbuf_ind; short rtab_ind; short ovtype_ind; short ov_inde; short maxrow_ind; short numrow_ind; short returnCode_ind; short returnMsg_ind; EXEC SQL END DECLARE SECTION; /* create table */ EXEC SQL CREATE TABLE xml_order_tab (xmlorder XMLVarchar); /* initialize host variable and indicators */ strcpy(collection,"sales_ord"); strcpy(result_tab,"xml_order_tab"); override[0] = '\0'; overrideType = NO_OVERRIDE; max_row = 500; num_row = 0; returnCode = 0; msg_txt[0] = '\0'; collection_ind = 0; rtab_ind = 0; ov_ind = -1; ovtype_ind = 0; maxrow_ind = 0; numrow_ind = -1; returnCode_ind = -1; returnMsg_ind = -1; /* Call the store procedure */ EXEC SQL CALL dxxRetrieve(:collection:collection_ind; :result_tab:rtab_ind, :overrideType:ovtype_ind,:override:ov_ind, :max_row:maxrow_ind,:num_row:numrow_ind, :returnCode:returnCode_ind,:returnMsg:returnMsg_ind);