Manuali IBM

XML Extender - Gestione e programmazione


Procedure memorizzate di composizione

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.

dxxGenXML()

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:
  • NO_OVERRIDE: nessuna sostituzione.
  • SQL_OVERRIDE: sostituzione con SQL_stmt.
  • XML_OVERRIDE: sostituzione con una condizione basata su XPath.
IN
override Sostituisce la condizione nel file DAD. Il valore di input si basa sul valore overrideType.
  • NO_OVERRIDE: una stringa NULL.
  • SQL_OVERRIDE: un'istruzione SQL valida. L'utilizzo di questo overrideType richiede che nel file DAD sia utilizzata l'associazione SQL. L'istruzione SQL di input sostituisce SQL_stmt nel file DAD.
  • XML_OVERRIDE: una stringa che contiene una o più espressioni delimitate da doppi apici e separate da "AND". L'utilizzo di questo overrideType richiede che nel file DAD sia utilizzata l'associazione RDB_node.
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);

dxxRetrieveXML()

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:
  • NO_OVERRIDE: nessuna sostituzione.
  • SQL_OVERRIDE: sostituzione con SQL_stmt.
  • XML_OVERRIDE: sostituzione con una condizione basata su XPath.
IN
override Sostituisce la condizione nel file DAD. Il valore di input si basa sul valore overrideType.
  • NO_OVERRIDE: una stringa NULL.
  • SQL_OVERRIDE: un'istruzione SQL valida. L'utilizzo di questo overrideType richiede che nel file DAD sia utilizzata l'associazione SQL. L'istruzione SQL di input sostituisce SQL_stmt nel file DAD.
  • XML_OVERRIDE: una stringa che contiene una o più espressioni delimitate da doppi apici e separate da "AND". L'utilizzo di questo overrideType richiede che nel file DAD sia utilizzata l'associazione RDB_node.
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);


[ Inizio pagina | Pagina precedente | Pagina successiva | Indice | Indice analitico ]