XMLFOREST función escalar

La función XMLFOREST devuelve un valor XML que es una secuencia de nodos de elemento XML.

Leer diagrama de sintaxisOmitir el diagrama de sintaxis visualXMLFOREST(xmlnamespace-function,,element-content-expressionASnombre-elementoOPTION1EMPTY ON NULLNULL ON NULLXMLBINARYUSINGBASE64XMLBINARYUSINGHEX2)
Notas:
  • 1 La cláusula OPTION solo puede especificarse si se especifica al menos una xmlattributes-function o una element-content-expression.
  • 2 La misma cláusula no debe especificarse más de una vez.

El esquema es SYSIBM.

xmlnamespace-function
Especifica las declaraciones de espacio de nombres XML que son el resultado de la función XMLNAMESPACES. Los espacios de nombres que se declaran se encuentran en el ámbito de la función XMLFOREST. Los espacios de nombres se aplican a cualquier función XML anidada dentro de la función XMLFOREST, independientemente de si esas funciones aparecen o no dentro de otra subselección. Consulte la función escalar XMLNAMESPACES para obtener más información sobre la declaración de espacios de nombres XML.

Si no se especifica xmlnamespace-function, las declaraciones de espacio de nombres no se asocian con la secuencia construida de nodos de elementos XML.

expresión-contenido-elemento
Especifica una expresión que devuelve un valor que se utiliza para el contenido de un elemento XML generado. El resultado de la expresión se asigna a un valor XML de acuerdo con las reglas de asignación de un valor SQL a un valor XML. Si la expresión no es una simple referencia de columna, debe especificarse el nombre del elemento.
AS nombre-elemento
Especifica un identificador que se utiliza para el nombre del elemento XML.

Un nombre de elemento XML debe ser un QName XML. Si el nombre está calificado, el prefijo del espacio de nombres debe declararse dentro del ámbito.

Si no se especifica el nombre del elemento, la expresión del contenido del elemento debe ser un nombre de columna. El nombre del elemento se crea a partir del nombre de la columna utilizando la asignación totalmente escapada de un nombre de columna a un QName.

opción
Especifica las opciones para el resultado de valores NULL, datos binarios y datos de bits. Las opciones no serán heredadas por las funciones XMLELEMENT o XMLFOREST que aparecen en element-content-expression.
EMPTY ON NULL o NULL ON NULL
Especifica si se devuelve un valor nulo o un elemento vacío cuando los valores de cada expresión de contenido de elemento son un valor nulo. EMPTY ON NULL y NULL on NULL solo afectan al manejo nulo de los argumentos element-content-expression, no al manejo de valores de un argumento xmlattributes-function.
EMPTY ON NULL
Si el valor de cada expresión-contenido-elemento es nulo, se devuelve un elemento vacío.

EMPTY ON NULL es el valor predeterminado.

NULL ON NULL
Si el valor de cada elemento expresión-contenido-elemento es nulo, se devuelve un valor nulo.
XMLBINARY USING BASE64 o XMLBINARY USING HEX
Especifica la codificación asumida de los datos de entrada binarios, los datos de cadena de caracteres con el atributo FOR BIT DATA, ROWID o un tipo distinto basado en uno de estos tipos. La codificación se aplica a los valores de atributo o contenido del elemento.
XMLBINARY USING BASE64
Especifica que se da por supuesta la codificación de caracteres base64, tal como define la codificación xs:base64Binary para el tipo de esquema XML. Inicio del cambioLa codificación UTF-8 ( base64 ) utiliza un subconjunto de 64 caracteres del US-ASCII (10 dígitos, 26 caracteres en minúscula, 26 caracteres en mayúscula, «+» y «/») para representar cada 6 bits de los datos binarios o de bits mediante un carácter imprimible en el subconjunto. Estos caracteres son una selección concebida especialmente para permitir su representación universal. Además, el carácter «=» representa un carácter de relleno de línea.fin del cambio Con este método, el tamaño de los datos codificados es un 33 por ciento mayor que los datos binarios o de bits originales.

XMLBINARY USING BASE64 es el valor predeterminado.

XMLBINARY USING HEX
Especifica que se da por supuesta la codificación de caracteres hexadecimales, tal como define la codificación xs:hexBinary para el tipo de esquema XML. La codificación hexadecimal representa cada byte (8 bits) con dos caracteres hexadecimales. Mediante la utilización de este método, los datos codificados doblan el tamaño de los datos binarios o de bits originales.

La función XMLFOREST puede expresarse utilizando las funciones XMLCONCAT y XMLELEMENT.

Esta función toma un conjunto opcional de declaraciones de espacio de nombres y uno o más argumentos que componen el nombre y el contenido del elemento para uno o más nodos de elemento. El resultado es una secuencia XML que contiene una secuencia de nodos de elemento o el valor nulo.

El resultado de la función es un valor XML. El resultado puede ser nulo; si todos los argumentos de elemento-contenido-expresión son nulos y la opción NULL ON NULL está en vigor, el resultado es el valor nulo.

Inicio del cambioEjemplo : generar un elemento Emp para cada empleado de la tabla EMP de muestra que fue contratado en 1980 o después. Concatenar los valores de las columnas FIRSTNME y LASTNAME para formar el atributo Name del elemento Emp. Utilice XMLFOREST para crear dos elementos anidados del elemento Emp: el elemento Hiredate y el elemento Department. El valor del elemento Hiredate es el valor de la columna HIREDATE. El valor del elemento Department es el valor de la columna WORKDEPT.Inicio del cambio
SELECT e.EMPNO AS "ID",
 XMLSERIALIZE(
   XMLELEMENT(
    NAME "Emp",
    XMLATTRIBUTES(e.FIRSTNME || ' ' || e.LASTNAME AS "Name"),
    XMLFOREST(e.HIREDATE AS "Hiredate",e.WORKDEPT AS "Department"))
  AS CLOB(100))
 AS "Result"
 FROM EMP e
 WHERE YEAR(HIREDATE)>='1980';
fin del cambiofin del cambio
Inicio del cambioLa consulta devuelve resultados similares a estos:
ID      Result    
------------------------------------------
000070  <Emp Name="EVA PULASKI">
         <Hiredate>1980-09-30</Hiredate>
         <Department>D21</Department>
        </Emp> 
000100  <Emp Name="THEODORE SPENSER">
         <Hiredate>1980-06-19</Hiredate>
         <Department>E21</Department>
        </Emp>
000270  <Emp Name="MARIA PEREZ">
         <Hiredate>1980-09-30</Hiredate>
         <Department>D21</Department>
        </Emp> 
000290  <Emp Name="JOHN PARKER">
         <Hiredate>1980-05-30</Hiredate>
         <Department>E11</Department>
        </Emp>
fin del cambio