Unindo Dados em uma Mensagem

A cláusula FROM de uma função SELECT não é restrita para ter um item. Especificar vários itens na cláusula FROM produz o efeito de junção do produto Cartesiano típico, no qual o resultado inclui um item para todas as combinações de itens nas duas listas.

Utilizar a cláusula FROM desta maneira produz o mesmo efeito de junção do SQL padrão.

A mensagem Invoice inclui um conjunto de detalhes do cliente, detalhes de pagamento e detalhes das compras feitas pelo cliente. Codifique o ESQL a seguir para processar a mensagem de entrada Invoice:

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

A seguinte mensagem de saída é gerada:

  <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>

Os resultados são produzidos, fornecendo o número de descrição na primeira linha (um) multiplicada 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 isto consultando os campos LastName e UnitPrice selecionados a partir 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.XMLNS.Test.Result1[] =
  (SELECT ... FROM InputBody.Test.A[], InputBody.Test.b);
OutputRoot.XMLNS.Test.Result1 =
    (SELECT ... FROM InputBody.Test.A, InputBody.Test.b);

O local de [] em cada caso é significativo. Qualquer número de itens pode ser especificado na cláusula FROM, não apenas um ou dois. Se qualquer um dos itens especificar [] para indicar uma lista de itens, a função SELECT retornará uma lista de resultados (a lista poderá conter apenas um item, mas a função SELECT poderá retornar uma lista de itens).

O destino da designação deve especificar uma lista (portanto, deve finalizar em []) ou você deve utilizar Função THE se souber que a cláusula WHERE garante que apenas uma combinação é 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ó Banco de Dados
Nó Filter
Referência de ESQL
Função SELECT
Instrução SET
Função THE
Mensagem de Exemplo
Avisos | Marcas Registradas | Downloads | Biblioteca | Suporte | Feedback

Copyright IBM Corporation 1999, 2009Copyright IBM Corporation 1999, 2009.
Última atualização : 2009-02-13 16:12:47

ak05820_