Selecionando Dados de Colunas do Banco de Dados

Você pode configurar um nó Compute, Filter ou Database para selecionar dados de colunas do banco de dados e incluí-lo em uma mensagem de saída. O exemplo a seguir assume que você possui uma tabela do banco de dados chamada USERTABLE com duas colunas de tipos de dados char(6) (ou equivalente), chamadas Column1 e Column2. A tabela contém duas linhas:

  Column1 Column2
Row 1 value1 value2
Row 2 value3 value4

Configure o nó Compute, Filter ou Database para identificar o banco de dados no qual a tabela foi definida. Por exemplo, se você estiver utilizando o banco de dados padrão (especificado na propriedade "origem de dados" do nó), clique com o botão direito do mouse no nó, selecione Abrir ESQL e codifique as seguintes instruções ESQL no módulo para este nó:

SET OutputRoot = InputRoot;
DELETE FIELD OutputRoot.*[<];
SET OutputRoot.XML.Test.Result[] =
    (SELECT T.Column1, T.Column2 FROM Database.USERTABLE AS T);

Isso produz a seguinte mensagem de saída:

<Test>
    <Result>
          <Column1>value1</Column1>
        <Column2>value2</Column2>
    </Result>
    <Result>
        <Column1>value3</Column1>
        <Column2>value4</Column2>
    </Result>
</Test>
Para disparar a SELECT, envie uma mensagem de disparo com um corpo XML que esteja no seguinte formato:
<Test>
    <Result>
            <Column1></Column1>
            <Column2></Column2>
    </Result>
    <Result>
            <Column1></Column1>
            <Column2></Column2>
    </Result>
</Test>

A estrutura exata do XML não é importante, mas a tag de inclusão deve ser <Teste> para corresponder à referência no ESQL. Se não for, as instruções ESQL resultarão na formação de marcações circundantes de nível superior, que não é XML válido.

Se desejar criar uma mensagem de saída que inclua todas as colunas de todas as linhas que atendem uma determinada condição, utilize a instrução SELECT com uma cláusula WHERE:

-- Declare and initialize a variable to hold the
--      test vaue (in this case the surname Smith)
DECLARE CurrentCustomer STRING 'Smith';

-- Loop through table records to extract matching information
SET OutputRoot.XML.Invoice[] = 
        (SELECT R FROM Database.USERTABLE AS R
                            WHERE R.Customer.LastName = CurrentCustomer
    );

Os campos de mensagem são criados na mesma ordem que as colunas aparecem na tabela.

Se estiver familiarizado com SQL em um ambiente do banco de dados, talvez você espere codificar SELECT *. Isso não é aceito pelo intermediário, porque você deve iniciar todas as referências a colunas com um nome de correlação. Isso evita ambigüidades com variáveis declaradas. Além disso, se você codificar SELECT I.*, isso será aceito pelo intermediário, mas o * será interpretado como o primeiro elemento filho e não todos os elementos, conforme você espera de outro SQL de banco de dados.

Selecionando Dados de uma Tabela em um Sistema de Banco de Dados que Faz Distinção entre Maiúsculas e Minúsculas

Se o sistema de banco de dados fizer distinção entre maiúsculas e minúsculas, é necessário utilizar uma abordagem alternativa. Essa abordagem também é necessária para alterar o nome do campo gerado para algo diferente:

SET OutputRoot = InputRoot;
SET OutputRoot.XML.Test.Result[] =
    (SELECT T.Column1 AS Column1, T.Column2 AS Column2
    FROM Database.USERTABLE AS T);

Esse exemplo produz a mesma mensagem que o exemplo acima. Verifique se as referências às colunas do banco de dados (neste exemplo, T.Column1 e T.Column2) são especificadas no tipo de letra correto para corresponder exatamente às definições do banco de dados. Se isso não for feito, por exemplo, se você especificar T.COLUMN1, o intermediário gerará um erro de tempo de execução. Observe o uso de Column1 e Column2 na instrução SELECT. Você pode utilizar quaisquer valores aqui, eles não precisam corresponder aos nomes das colunas definidas no banco de dados, como correspondem neste exemplo.

Avisos | Marcas Registradas | Downloads | Biblioteca | Suporte | Feedback
Direitos Autorais IBM Corporation 1999, 2006 Última Atualização: 1 Sep 2006
ak05810_