Selecionando um Subcampo de um Campo Maior

Você pode ter um fluxo de mensagens que processe uma mensagem que contém subcampos delimitados. Você pode codificar o ESQL para extrair um subcampo do conteúdo ao redor se conhecer os delimitadores do subcampo.

Se você criar uma função que execute essa tarefa ou uma tarefa semelhante, poderá chamá-la a partir dos módulos ESQL (para os nós Compute, Database e Filter) e a partir dos arquivos de mapeamento (utilizados pelos nós DataDelete, DataInsert, DataUpdate, Extract, Mapping e Warehouse).

O seguinte exemplo de função extrai um subcampo específico de uma mensagem que é delimitada por um caractere específico.

CREATE FUNCTION SelectSubField
       (SourceString CHAR, Delimiter CHAR, TargetStringPosition INT)
       RETURNS CHAR
-- Essa função retorna uma subcadeia na posição do parâmetro
TargetStringPosition dentro do
-- parâmetro transmitido SourceString.  Um exemplo de uso pode ser:
-- SelectSubField(MySourceField,' ',2) que selecionará o segundo
subcampo do
-- campo MySourceField delimitado por um espaço em branco. Se
MySourceField tiver o valor
-- "First Second Third" a função retornará o valor "Second"
    BEGIN
    DECLARE DelimiterPosition INT;
    DECLARE CurrentFieldPosition INT 1;
    DECLARE StartNewString INT 1;
    DECLARE WorkingSource CHAR SourceString;
    SET DelimiterPosition = POSITION(Delimiter IN SourceString);
    WHILE CurrentFieldPosition < TargetStringPosition
     	DO
     		IF DelimiterPosition = 0  THEN
   			-- DelimiterPosition será 0 se o delimitador não for localizado
         -- saia do loop
     			SET CurrentFieldPosition = TargetStringPosition;
     		ELSE
     			SET StartNewString = DelimiterPosition + 1;
     			SET WorkingSource = SUBSTRING(WorkingSource FROM
StartNewString);
     			SET DelimiterPosition = POSITION(Delimiter IN WorkingSource);
     			SET CurrentFieldPosition = CurrentFieldPosition + 1;
        END IF;
    END WHILE;
    IF DelimiterPosition > 0 THEN
       -- Remova tudo após o delimitador da cadeia
       SET WorkingSource = SUBSTRING(WorkingSource FROM 1 FOR
DelimiterPosition);     	
       SET WorkingSource = TRIM(TRAILING Delimiter FROM
WorkingSource);
    END IF;
    RETURN WorkingSource;
END;	
Conceitos relacionados
Visão Geral de Fluxos de Mensagens
Tarefas relacionadas
Projetando um Fluxo de Mensagens
Definindo o Conteúdo do Fluxo de Mensagens
Referências relacionadas
Nó Compute
Nó Banco de Dados
Nó Filter
Referência de ESQL
Instrução DECLARE
Função POSITION
Instrução SET
Função SUBSTRING
Função TRIM
Instrução WHILE
Avisos | Marcas Registradas | Downloads | Biblioteca | Suporte | Feedback

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

ac20400_