Utilizzando XML Extender, è possibile richiamare un documento intero o il contenuto degli elementi e gli attributi. Quando si richiama direttamente una colonna XML, XML Extender restituisce l'UDT come tipo di colonna. Per informazioni dettagliate sul richiamo dei dati consultare le seguenti sezioni:
XML Extender fornisce due metodi di richiamo dati: le funzioni cast
predefinite e la UDF di sovraccarico Content(). La sezione Tabella 11 illustra quando utilizzare ciascun metodo.
Tabella 11. Le funzioni di richiamo di XML Extender
Tipo XML | Richiamare da DB2 come... | ||
---|---|---|---|
VARCHAR | CLOB | FILE | |
XMLVARCHAR | VARCHAR | N/D | Content() |
XMLCLOB | N/D | XMLCLOB | Content() |
XMLFILE | N/D | Content() | FILE |
Panoramica delle attività:
XML Extender fornisce de metodi per il richiamo dei dati:
Tabella 12. Le funzioni cast predefinite di XML Extender
Cast utilizzato nella clausola select | Tipo restituito | Descrizione |
---|---|---|
varchar(XMLVARCHAR) | VARCHAR | documento XML in VARCHAR |
clob(XMLCLOB) | CLOB | documento XML in CLOB |
varchar(XMLFile) | VARCHAR | nome file XML in VARCHAR |
EXEC SQL SELECT db2xml.varchar(order) from sales_tab
Ad esempio, si dispone del documento XML memorizzato come XMLFILE e si desidera eseguirlo nella memoria, è possibile utilizzare la UDF Content() che richiama un tipo di dati XMLFILE come input e restituire un CLOB.
La UDF Content() esegue due differenti funzioni di richiamo, a seconda del tipo di dati specificato. Tale funzione:
XMLFILE to CLOB: Richiama i dati da un file e li esporta in un indicatore di posizione CLOB.
Content(xmlobj XMLFile)
tipo XML nel file esterno: Richiama il contenuto XML memorizzato come tipo di dati XML e lo esporta in un file esterno.
Tipo XML Content(xmlobj, nomefile varchar(512))
Dove:
Nell'esempio riportato di seguito, un piccolo segmento deI programma C con SQL integrata illustra come un documento XML viene richiamato da un file nella memoria. In questo esempio la colonna BOOK è di tipo XMLFILE.
EXEC SQL BEGIN DECLARE SECTION; SQL TYPE IS CLOB_LOCATOR xml_buff; EXEC SQL END DECLARE SECTION; EXEC SQL CONNECT TO SALES_DB EXEC SQL DECLARE c1 CURSOR FOR SELECT Content(order) from sales_tab EXEC SQL OPEN c1; do { EXEC SQL FETCH c1 INTO :xml_buff; if (SQLCODE != 0) { break; } else { /* do whatever you need to do with the XML doc in buffer */ } } EXEC SQL CLOSE c1; EXEC SQL CONNECT RESET;
E' possibile richiamare (estrarre) il contenuto di un elemento o un valore attributo da uno o più documenti XML (ricerca documenti della raccolta o del documento singolo). XML Extender fornisce funzioni di estrazione definite dall'utente che è possibile specificare nella clausola SQL SELECT per ciascun tipo di dati SQL.
Il richiamo del contenuto e dei valori degli elementi e degli attributi è utile nello sviluppo delle applicazioni, in quanto è possibile accedere ai dati XML come dati relazionali. Ad esempio, si supponga di disporre di 1000 documenti XML memorizzati nella colonna ORDER nella tabella SALES_TAB. E' possibile richiamare i nomi di tutti i clienti che hanno ordinato gli articoli utilizzando la seguente istruzione SQL con le UDF di estrazione nella clausola SELECT per richiamare le seguenti informazioni:
SELECT extractVarchar(Order, '/Order/Customer/Name') from sales_order_view WHERE price > 2500.00
In questo esempio, l'UDF di estrazione richiama l'elemento <customer> dalla colonna ORDER come tipo di dati VARCHAR. Il percorso di ubicazione è /Order/Customer/Name (consultare la sezione Percorso di ubicazione per la sintassi del percorso di ubicazione). Inoltre il numero dei valori restituiti viene ridotto utilizzando una clausola WHERE che specifica solo il contenuto dell'elemento <customer> e l'elemento secondario <ExtendedPrice> con valore superiore a 2500.00.
Per estrarre il contenuto dell'elemento o i valori dell'attributo: Utilizzare le UDF di estrazione elencate in Tabella 13 utilizzando la seguente sintassi come tabella o funzione scalare:
extractretrieved_datatype(xmlobj, path)
Dove:
Tabella 13 illustra le funzioni di estrazione, sia in formato scalare
sia in formato tabella:
Tabella 13. Le funzioni di estrazione XML Extender
Funzione scalare | Funzione di tabella | Nome colonna restituita (funzione tabella) | Tipo restituito |
---|---|---|---|
extractInteger() | extractIntegers() | returnedInteger | INTEGER |
extractSmallint() | extractSmallints() | returnedSmallint | SMALLINT |
extractDouble() | extractDoubles() | returnedDouble | DOUBLE |
extractReal() | extractReals() | returnedReal | REAL |
extractChar() | extractChars() | returnedChar | CHAR |
extractVarchar() | extractVarchars() | returnedVarchar | VARCHAR |
extractCLOB() | extractCLOBs() | returnedCLOB | CLOB |
extractDate() | extractDates() | returnedDate | DATE |
extractTime() | extractTimes() | returnedTime | TIME |
extractTimestamp() | extractTimestamps() | returnedTimestamp | TIMESTAMP |