Função FOR

A função do campo FOR avalia uma expressão e designa um valor resultante de TRUE, FALSE ou UNKNOWN.

SINTAXE

A função FOR permite gravar uma expressão que itera sobre todas as instâncias de um campo de repetição. Para cada instância, ela processa uma expressão booleana e intercala os resultados.

Por exemplo:
FOR ALL Body.Invoice.Purchases."Item"[] AS I (I.Quantity <= 50)
Nota:
  1. Com o predicado quantificado, a primeira coisa a observar é [] no final do campo de referência após FOR ALL. Os colchetes definem a iteração de todas as instâncias do campo Item.

    Em alguns casos, esta sintaxe parece desnecessária, porque você pode obter essas informações do contexto, mas isto é feito para consistência com outras partes da sintaxe.

  2. ASclause associa o nome I na referência de campo com a instância atual do campo repetido. Isto é semelhante ao conceito de classes de iterador utilizadas em algumas linguagens orientadas a objetos, tais como, C++. A expressão entre parênteses é um predicado que é avaliado para cada instância do campo Item.

Se especificar a palavra-chave ALL, a função itera sobre todas as instâncias do campo Item dentro de Body.Invoice.Purchases e avalia o predicado I.Quantity <= 50. Se o predicado for avaliado como:
  • TRUE (caso o campo esteja vazio, ou para todas as instâncias de Item) retorna TRUE.
  • FALSE (para qualquer instância de Item) retorna FALSE.
  • De outra maneira, retornará UNKNOWN.
As palavras-chave ANY e SOME são equivalentes. Se você utilizar ambas, a função itera sobre todas as instâncias do campo Item dentro de Body.Invoice.Purchases e avaliar o predicado I.Quantity <= 50. Se o predicado for avaliado como:
  • FALSE (caso o campo esteja vazio, ou para todas as instâncias de Item) retorna FALSE.
  • TRUE (para qualquer instância de Item) retorna TRUE.
  • De outra maneira, retornará UNKNOWN.
Para ilustrar isso com detalhes adicionais, os exemplos a seguir são baseados em Mensagem de Exemplo. Na seguinte expressão de filtro:
FOR ANY Body.Invoice.Purchases."Item"[] AS I (I.Title = 'The XML Companion')
o subpredicado é avaliado como TRUE. No entanto, esta próxima expressão retorna FALSE:
FOR ANY Body.Invoice.Purchases."Item"[] AS I (I.Title = 'C Primer')
porque C Primer não está incluído nesta fatura. Se, nessa instância, alguns dos itens da fatura não incluírem um campo de título de manual, o subpredicado retornará UNKNOWN e o predicado quantificado retornará o valor UNKNOWN.
É necessário ter muita atenção para lidar com a possibilidade de aparecer valores nulos. Grave este filtro com uma verificação explícita da existência do campo, conforme a seguir:
FOR ANY Body.Invoice.Purchases."Item"[] AS I (I.Book IS NOT NULL AND
I.Book.Title = 'C Primer')
O predicado IS NOT NULL assegura que, caso um campo Item não contenha Book, um valor FALSE seja retornado a partir do sub-predicado.
Conceitos relacionados
Visão Geral do ESQL
Tarefas relacionadas
Desenvolvendo ESQL
Acessando Várias Ocorrências Desconhecidas de um Elemento
Referências relacionadas
Diagramas de Sintaxe: Tipos Disponíveis
Mensagem de Exemplo
Avisos | Marcas Registradas | Downloads | Biblioteca | Suporte | Feedback
Direitos Autorais IBM Corporation 1999, 2006 Última Atualização: 1 Sep 2006
ak18490_