XMLFOREST Função escalar

A função XMLFOREST retorna um valor XML que é uma sequência de nós do elemento XQuery.

Read syntax diagramSkip visual syntax diagramXMLFOREST( xmlnamespaces-declaration, ,element-content-expressionASelement-nameOPTIONNULL ON NULLEMPTY ON NULLXMLBINARYUSINGBASE64XMLBINARYUSINGHEX1)
Notes:
  • 1 The same clause must not be specified more than once.

O esquema é SYSIBM. O nome da função não pode ser especificado como um nome qualificado.

xmlnamespaces-declaração
Especifica as declarações de namespace XML que são o resultado da declaração do XMLNAMESPACES . Os namespaces que são declarados estão no escopo da função XMLFOREST. Os namespaces aplicam-se a quaisquer funções XML aninhadas dentro da função XMLFOREST, independentemente de aparecidos ou não dentro de outro subselect.

Se xmlnamespaces-declaração não for especificado, as declarações de namespace não estão associadas aos elementos construídos.

elemento-content-expression
O conteúdo do nó do elemento XML gerado é especificado por uma expressão. O tipo de dados de elemento-content-expression não pode ser um tipo BINARY, um tipo VARBINARY ou um tipo estruturado (SQLSTATE 42884). A expressão pode ser qualquer expressão SQL. Se a expressão não for uma referência de coluna simples, um nome de elemento deve ser especificado.
AS nome-nome
Especifica o nome de elemento XML como um identificador SQL. O nome do elemento deve ser da forma de um nome qualificado XML, ou QName (SQLSTATE 42634). Veja as especificações do namespace XML W3C XML para obter mais detalhes sobre nomes válidos. Se o nome for qualificado, o prefixo de espaço de nomes deve ser declarado dentro do escopo (SQLSTATE 42635). Se elemento-nome não for especificado, element-content-expression deve ser um nome de coluna (SQLSTATE 42703). O nome do elemento é criado a partir do nome da coluna usando o mapeamento totalmente escapado a partir de um nome de coluna para um QName.
OPÇÃO
Especifica opções adicionais para construção do elemento XML. Se nenhuma cláusula OPTION for especificada, o padrão será NULL EM NULL XMLBINARY USANDO BASE64. Esta cláusula não tem impacto sobre as chamadas XMLELEMENT aninhadas especificadas em elemento-content-expression.
VAZIO EM NULL ou NULL ON NULL
Especifica se um valor nulo ou um elemento vazio deve ser retornado se os valores de cada elemento-content-expression for um valor nulo. Esta opção só afeta o tratamento nulo de conteúdos do elemento, não os valores de atributo. O padrão é NULL ON NULL.
VAZIO EM NULL
Se o valor de cada elemento-content-expression for nulo, um elemento vazio será retornado.
NULL EM NULL
Se o valor de cada elemento-content-expression for null, um valor nulo será retornado.
XMLBINARY USANDO BASE64 ou XMLBINARY USANDO HEX
Especifica a codificação assumida de dados de entrada binária, dados string de caracteres com o atributo FOR BIT DATA, ou um tipo distinto que é baseado em um desses tipos. A codificação se aplica ao conteúdo do elemento ou aos valores de atributo. O padrão é XMLBINARY USANDO BASE64.
XMLBINARY USANDO BASE64
Especifica que a codificação assumida é de caracteres base64 , conforme definido para a codificação do tipo de esquema XML xs:base64Binary . A codificação base64 usa um subconjunto de 65 caracteres de US-ASCII (10 dígitos, 26 caracteres minúsulos, 26 caracteres maiúsores, '+', e '/') para representar a cada seis bits do binário ou bit dados com um caractere impresso no subconjunto. Esses caracteres são selecionados para que eles sejam universalmente representativos. Usando este método, o tamanho dos dados codificados é 33 maior do que os dados binários ou bits originais.
XMLBINARY USANDO HEX
Especifica que a codificação assumida é de caracteres hexadecimais, conforme definido para o tipo de esquema XML xs:hexBinary encoding. A codificação hexadecimal representa cada byte (8 bits) com dois caracteres hexadecimais. Usando este método, os dados codificados são duas vezes o tamanho do binário original ou bit data.

Esta função leva um conjunto opcional de declarações de namespace e um ou mais argumentos que compõem o nome e o conteúdo do elemento para um ou mais nós de elemento. O resultado é uma sequência XML contendo uma sequência de nós do elemento XQuery ou o valor nulo.

O tipo de dado do resultado é XML. Se qualquer um dos argumentos elemento-content-expression pode ser nulo, o resultado pode ser nulo; se todos os valores de argumento elemento-content-expression forem nulos e a opção NULL ON NULL estiver em vigor, o resultado será o valor nulo.

A função XMLFOREST pode ser expressa através do uso de XMLCONCAT e XMLELEMENT. Por exemplo, as duas expressões a seguir são semanticamente equivalentes.
XMLFOREST(xmlnamespaces-declaration, arg1 AS name1, arg2 AS name2 ...)
XMLCONCAT(
  XMLELEMENT(
    NAME name1, xmlnamespaces-declaration, arg1
  ),
  XMLELEMENT(
    NAME name2, xmlnamespaces-declaration, arg2
  )
  ...
)

Notas

  • Ao construir elementos que serão copiados como conteúdo de outro elemento que define namespaces padrão, os namespaces padrão devem ser explicitamente não declarados no elemento copiado para evitar possíveis erros que poderiam resultar de herdar o espaço de nomes padrão do novo elemento pai. Prefixos de namespace predefinidos ('xs', 'xsi', 'xml' e 'sqlxml') também devem ser declarados explicitamente quando forem usados.

Exemplo

Nota: XMLFOREST não insere espaços em branco ou novos caracteres de linha na saída. Toda a saída de exemplo foi formatada para apriviver a legibilidade.
Construa uma floresta de elementos com um namespace padrão.
   SELECT EMPNO,
     XMLFOREST(
       XMLNAMESPACES(
         DEFAULT 'http://hr.org', 'http://fed.gov' AS "d"
       ),
       LASTNAME, JOB AS "d:job"
     )
   AS "Result"
   FROM EMPLOYEE
   WHERE EDLEVEL = 12
Esta consulta produz o seguinte resultado:
EMPNO  Result
000290 <LASTNAME xmlns="http://hr.org" xmlns:d="http://fed.gov">PARKER
  </LASTNAME>
<d:job xmlns="http://hr.org" xmlns:d="http://fed.gov">OPERATOR</d:job>

000310 <LASTNAME xmlns="http://hr.org" xmlns:d="http://fed.gov">SETRIGHT
  </LASTNAME>
<d:job xmlns="http://hr.org" xmlns:d="http://fed.gov">OPERATOR</d:job> 

200310 <LASTNAME xmlns="http://hr.org" xmlns:d="http://fed.gov">SPRINGER
  </LASTNAME>
<d:job xmlns="http://hr.org" xmlns:d="http://fed.gov">OPERATOR</d:job>