Zweck
Konstruiert XML-Dokumente mit Daten, die in den XML-Objektgruppendateien gespeichert sind; diese Dateien werden über die <Xcollection> in der DAD-Datei angegeben. Außerdem fügt die Prozedur jedes XML-Dokument als Zeile in die Ergebnistabelle ein. Sie können auch einen Cursor in der Ergebnistabelle öffnen und die Ergebnisgruppe abrufen.
Für eine höhere Flexibilität gibt dxxGenXML() dem Benutzer außerdem die Möglichkeit, die maximale Anzahl der zu generierenden Zeilen in der Ergebnistabelle anzugeben. Dadurch wird die Dauer verringert, die die Anwendung während eines Testprozesses auf die Ergebnisse warten muß. Die gespeicherte Prozedur gibt die Anzahl der tatsächlichen Zeilen in der Tabelle zurück sowie alle Fehlerinformationen einschließlich Fehlercodes und Fehlermeldungen.
Zur Unterstützung dynamischer Abfragen verwendet dxxGenXML() den Eingabeparameter override. Entsprechend der Eingabe von overrideType kann die Anwendung die SQL_stmt-Anweisung für die SQL-Zuordnung überschreiben oder die Bedingungen in RDB_node für die RDB_node-Zuordnung in der DAD-Datei. Der Eingabeparameter overrideType wird verwendet, um den Typ von override klarzustellen. Ausführliche Informationen zum Parameter override finden Sie im Abschnitt Werte in der DAD-Datei dynamisch überschreiben.
dxxGenXML(CLOB(100K) DAD, /* Eingabe */ char(UDB_SIZE) resultTabName, /* Eingabe */ integer overrideType /* Eingabe */ varchar(1024) override, /* Eingabe */ integer maxRows, /* Eingabe */ integer numRows, /* Ausgabe */ long returnCode, /* Ausgabe */ varchar(1024) returnMsg) /* Ausgabe */
Parameter
Tabelle 46. Parameter für dxxGenXML()
Parameter | Beschreibung | IN/OUT-Parameter |
---|---|---|
DAD | Ein CLOB mit der DAD-Datei. | IN |
resultTabName | Der Name der Ergebnistabelle, diese Datei sollte vor dem Aufruf bereits vorhanden sein. Die Tabelle enthält nur eine Spalte mit dem Typ XMLVARCHAR oder XMLCLOB. | IN |
overrideType | Eine Markierung, die den Typ des Parameters override
angibt:
| IN |
override | Überschreibt die Bedingung in der DAD-Datei. Der Eingabewert
basiert auf dem overrideType.
| IN |
maxRows | Die maximale Anzahl von Zeilen in der Ergebnistabelle. | IN |
numRows | Die tatsächliche Anzahl generierter Zeilen in der Ergebnistabelle. | OUT |
returnCode | Der Rückkehrcode von der gespeicherten Prozedur. | OUT |
returnMsg | Der Nachrichtentext, der im Fehlerfall zurückgegeben wird. | OUT |
Beispiele
Im folgenden Beispiel wird davon ausgegangen, daß die Ergebnistabelle mit dem Namen XML_ORDER_TAB erstellt wird und eine Spalte des Typs XMLVARCHAR enthält.
#include "dxx.h" #include "dxxrc.h" EXEC SQL INCLUDE SQLCA; EXEC SQL BEGIN DECLARE SECTION; SQL TYPE is CLOB(100K) dad; /* DAD */ SQL TYPE is CLOB_FILE dadFile; /* DAD-Datei */ char result_tab[32]; /* Name der Ergebnistabelle */ char override[2]; /* Überschreiben, auf NULL gesetzt*/ short overrideType; /* definiert in dxx.h */ short max_row; /* maximale Anzahl Zeilen */ short num_row; /* tatsächliche Anzahl Zeilen */ long returnCode; /* Rückkehr-Fehlercode */ char returnMsg[1024]; /* Fehlernachrichtentext */ short dad_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; /* Tabelle erstellen */ EXEC CREATE TABLE xml_order_tab (xmlorder XMLVarchar); /* Daten aus einer Datei in ein CLOB einlesen */ strcpy(dadfile.name,"e:\dxx\dad\litem3.dad"); dadfile.name_length = strlen("e:\dxx\dad\litem3.dad"); dadfile.file_options = SQL_FILE_READ; EXEC SQL VALUES (:dadfile) INTO :dad; 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; dad_ind = 0; rtab_ind = 0; ov_ind = -1; ovtype_ind = 0; maxrow_ind = 0; numrow_ind = -1; returnCode_ind = -1; returnMsg_ind = -1; /* Gespeicherte Prozedur aufrufen */ EXEC SQL CALL dxxGenXML(:dad:dad_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);