Manipulando Campos Repetidos em uma Árvore de Mensagens

Este tópico descreve a utilização da função SELECT e outras funções da coluna, para manipular campos repetidos em uma árvore de mensagens.

Suponha que você deseje executar uma ação especial em faturas que possuem um valor total de pedido maior que um valor específico. Para calcular o valor total do pedido de um campo Invoice, você deve multiplicar os campos Price pelos campos Quantity em todos os Items na mensagem e totalizar o resultado. Isto pode ser feito utilizando-se uma expressão SELECT, da seguinte forma:

(
 SELECT SUM( CAST(I.Price AS DECIMAL) * CAST(I.Quantity AS INTEGER) )
  FROM Body.Invoice.Purchases."Item"[] AS I
) 

O exemplo assume que é necessário utilizar expressões CAST para lançar os valores de cadeia dos campos Price e Quantity nos tipos de dados corretos. O lançamento do campo Price em um decimal produz um valor decimal com escala e precisão naturais, ou seja, qualquer escala e precisão são necessárias para representar o número. Estes CASTs não seriam necessários se os dados já estivessem em um tipo de dados apropriado.

A expressão SELECT funciona de forma semelhante ao predicado quantificado e funciona, na maioria das vezes, da mesma forma que uma SELECT funciona no SQL do banco de dados padrão. A cláusula FROM especifica o que está sendo repetido, nesse caso, todos os campos Item em Invoice e estabelece que a instância atual de Item pode ser referida para utilizar I. Esse formato de SELECT envolve uma função da coluna, nesse caso a função SUM, portanto, a SELECT é avaliada, incluindo juntamente os resultados da avaliação da expressão, dentro da função SUM para cada campo Item no Invoice. Assim como o SQL padrão, os valores NULL são ignorados por funções de coluna, com exceção da função de coluna COUNT explicada abaixo e um valor NULL é retornado pela função de coluna apenas se não houver valores não-NULL a serem combinados.

As outras funções de coluna fornecidas são MAX, MIN e COUNT. A função COUNT possui dois formatos que funcionam de maneira diferente com relação a NULLs. No primeiro formato, você o utiliza de forma muito semelhante à função SUM acima, por exemplo:

SELECT COUNT(I.Quantity)
  FROM Body.Invoice.Purchases."Item"[] AS I

Esta expressão retorna o número de campos Item para os quais o campo Quantidade é não-NULL. Ou seja, a função COUNT conta valores não-NULL da mesma forma que a função SUM adiciona valores não-NULL. A maneira alternativa de utilizar a função COUNT é a seguinte:

SELECT COUNT(*)
  FROM Body.Invoice.Purchases."Item"[] AS I

Utilizar COUNT(*) conta o número total de campos Item, independentemente de qualquer um dos campos ser NULL.De fato, o exemplo acima é equivalente a utilizar a função CARDINALITY, como em:

CARDINALITY(Body.Invoice.Purchases."Item"[]

Em todos os exemplos de SELECT fornecidos aqui, assim como no SQL padrão, você pode utilizar uma cláusula WHERE para fornecer filtragem nos campos.

Conceitos relacionados
Visão Geral de Fluxos de Mensagens
Visão Geral do ESQL
Modelagem de Mensagens
Tarefas relacionadas
Projetando um Fluxo de Mensagens
Definindo o Conteúdo do Fluxo de Mensagens
Gerenciando Arquivos ESQL
Referências relacionadas
Nó Compute
Nó Database
Nó Filter
Referência de ESQL
Função CARDINALITY
Função SELECT
Mensagem de Exemplo
Avisos | Marcas Registradas | Downloads | Biblioteca | Suporte | Feedback
Direitos Autorais IBM Corporation 1999, 2006 Última Atualização: 1 Sep 2006
ak20705_