Unindo Dados em uma Mensagem XML

A cláusula FROM não está restrita a ter um item. A especificação de vários itens na cláusula FROM produz o efeito de união do produto Cartesiano usual, no qual existe um item no resultado para todas as combinações de itens nas duas listas. Este é o mesmo efeito de união que o SQL padrão.

A mensagem Invoice inclui um conjunto de detalhes do cliente, detalhes de pagamento e detalhes das compras feitas pelo cliente. Se você codificar o seguinte ESQL para processar a mensagem Fatura de entrada:

SET OutputRoot.XML.Items.Item[] =
      (SELECT D.LastName, D.Billing,
                      P.UnitPrice, P.Quantity
        FROM InputBody.Invoice.Customer[] AS D,
                  InputBody.Invoice.Purchases.Item[] AS P);

será gerada a seguinte mensagem de saída:

  <Items>
  <Item>
        <LastName>Smith</LastName>
    <Billing>
      <Address>14 High Street</Address>
      <Address>Hursley Village</Address>
      <Address>Hampshire</Address>
      <PostCode>SO213JR</PostCode>
    </Billing>
    <UnitPrice>27.95</UnitPrice>
         <Quantity>2</Quantity>
  </Item>
  <Item>
        <LastName>Smith</LastName>
    <Billing>
      <Address>14 High Street</Address>
      <Address>Hursley Village</Address>
      <Address>Hampshire</Address>
      <PostCode>SO213JR</PostCode>
    </Billing>
    <UnitPrice>42.95</UnitPrice>
         <Quantity>1</Quantity>
  </Item>
  <Item>
        <LastName>Smith</LastName>
    <Billing>
      <Address>14 High Street</Address>
      <Address>Hursley Village</Address>
      <Address>Hampshire</Address>
      <PostCode>SO213JR</PostCode>
    </Billing>
    <UnitPrice>59.99</UnitPrice>
         <Quantity>1</Quantity>
  </Item>
</Items>

Existem três resultados, fornecendo o número de descrições na primeira lista (um) multiplicado pelo número de preços na segunda (três). Os resultados funcionam sistematicamente em todas as combinações das duas listas. Você pode ver isso consultando os campos LastName e UnitPrice, selecionados de cada resultado:

LastName Smith   UnitPrice 27.95
LastName Smith   UnitPrice 42.95
LastName Smith   UnitPrice 59.99

Você pode unir dados que ocorrem em uma lista e não-lista ou em duas não-listas e assim por diante. Por exemplo:

OutputRoot.XML.Test.Result1[] =
  (SELECT ... FROM InputBody.Test.A[], InputBody.Test.b);
OutputRoot.XML.Test.Result1 =
    (SELECT ... FROM InputBody.Test.A, InputBody.Test.b);

Observe a localização do "[]" em cada caso. Qualquer número de itens pode ser especificado na lista FROM, não apenas um ou dois. Se qualquer um dos itens especificar [] para indicar uma lista de itens, a SELECT gerará uma lista de resultados (a lista pode conter apenas um, mas a SELECT pode retornar potencialmente uma lista de itens). O destino da designação deve especificar uma lista (portanto, deve terminar em [] ou a palavra-chave THE deve ser utilizada, se você souber que a cláusula WHERE garante que apenas uma combinação será correspondida.

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 SELECT
Instrução SET
Mensagem de Exemplo
Avisos | Marcas Registradas | Downloads | Biblioteca | Suporte | Feedback
Direitos Autorais IBM Corporation 1999, 2006 Última Atualização: 1 Sep 2006
ak05820_