Le procedure memorizzate di composizione dxxGenXML() e dxxRetrieveXML() consentono la creazione dei documenti XML utilizzando i dati contenuti nelle tabelle esistenti del database. La procedura memorizzata dxxGenXML() rileva un file DAD come input; non richiede una raccolta XML abilitata. La procedura memorizzata dxxRetrieveXML() rileva un nome di raccolta XML abilitata come input.
Scopo
Crea documenti XML utilizzando i dati memorizzati nelle tabelle della raccolta XML specificati da <Xcollection> nel file DAD e inserisce ciascun documento XML come riga nella tabella dei risultati. E' inoltre possibile posizionare il cursore sulla tabella dei risultati ed eseguire la lettura sequenziale della serie di risultati.
Per maggiore flessibilità, dxxGenXML() consente all'utente di specificare il numero massimo di righe che devono essere create nella tabella dei risultati. In tal modo viene ridotto il periodo di attesa risultati durante un processo di prova. La procedura memorizzata restituisce il numero delle righe effettive contenute nella tabella e le eventuali informazioni sugli errori, compresi i codici e i messaggi di errore.
Per supportare interrogazioni dinamiche, dxxGenXML() rileva il parametro di input override. Sulla base del parametro di input overrideType, l'applicazione può sostituire SQL_stmt per l'associazione SQL oppure le condizioni di RDB_node per la relativa associazione nel file DAD. ll parametro di input overrideType è utilizzato per definire ulteriormente il tipo del parametro override. Per dettagli relativi al parametri override, consultare la sezione Sostituzione dinamica dei valori del file DAD.
dxxGenXML(CLOB(100K) DAD, /* 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 */
Parametri
Tabella 46. Parametri di dxxGenXML()
Parametro | Descrizione | Parametro IN/OUT |
---|---|---|
DAD | Il CLOB contenente il file DAD. | IN |
resultTabName | Il nome della tabella dei risultati, già esistente. La tabella contiene solo una colonna di tipo XMLVARCHAR o XMLCLOB. | IN |
overrideType | L'indicatore del tipo del seguente parametro
override:
| IN |
override | Sostituisce la condizione nel file DAD. Il valore di input si basa
sul valore overrideType.
| IN |
maxRows | Il numero massimo di righe contenuto nella tabella dei risultati. | IN |
numRows | Il numero effettivo di righe generato nella tabella dei risultati. | OUT |
returnCode | Il codice di ritorno della procedura memorizzata. | OUT |
returnMsg | Il testo del messaggio restituito in caso di errore. | OUT |
Esempi
Nel seguente esempio il nome della tabella dei risultati creata è XML_ORDER_TAB e la tabella presenta una colonna di tipo XMLVARCHAR.
#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 file */ 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 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; /* create table */ EXEC CREATE TABLE xml_order_tab (xmlorder XMLVarchar); /* read data from a file to a CLOB */ 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; /* Call the store procedure */ 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);
Scopo
Abilita un file DAD per l'utilizzo sia nella composizione che nella scomposizione. E' inoltre possibile utilizzare la procedura memorizzata dxxRetrieveXML() per richiamare i documenti XML scomposti. Come input, dxxRetrieveXML() rileva un buffer contenente il file DAD, il nome della tabella dei risultati creata e il numero massimo di righe da restituire e restituisce una serie di risultati della tabella dei risultati, il numero di righe effettivo in essa contenute, un codice di errore e il testo del messaggio.
Per supportare interrogazioni dinamiche, dxxRetrieveXML() rileva il parametro di input override. Sulla base del parametro di input overrideType, l'applicazione può sostituire SQL_stmt per l'associazione SQL oppure le condizioni di RDB_node per la relativa associazione nel file DAD. ll parametro di input overrideType è utilizzato per definire ulteriormente il tipo del parametro override. Per dettagli relativi al parametri override, consultare la sezione Sostituzione dinamica dei valori del file DAD.
I requisiti del file DAD relativi a dxxRetrieveXML() corrispondono ai requisiti di dxxGenXML(). L'unica differenza è che il file DAD non è un parametro di input per dxxRetrieveXML(), ma è il nome di una raccolta XML abilitata.
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 */
Parametri
Tabella 47. Parametri di dxxRetrieveXML()
Parametro | Descrizione | Parametro IN/OUT |
---|---|---|
collectionName | Il nome di una raccolta XML abilitata | IN |
resultTabName | Il nome della tabella dei risultati, già esistente. La tabella contiene solo una colonna di tipo XMLVARCHAR o XMLCLOB. | IN |
overrideType | L'indicatore del tipo del seguente parametro
override:
| IN |
override | Sostituisce la condizione nel file DAD. Il valore di input si basa
sul valore overrideType.
| IN |
maxRows | Il numero massimo di righe contenuto nella tabella dei risultati. | IN |
numRows | Il numero effettivo di righe generato nella tabella dei risultati. | OUT |
returnCode | Il codice di ritorno della procedura memorizzata. | OUT |
returnMsg | Il testo del messaggio restituito in caso di errore. | OUT |
Esempi
Di seguito è riportato un esempio di un richiamo di dxxRetrieveXML(). In questo esempio il nome della la tabella dei risultati creata è XML_ORDER_TAB e la tabella presenta una colonna di tipo XMLVARCHAR.
#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);