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ó Database
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
Direitos Autorais IBM Corporation 1999, 2006 Última Atualização: 1 Sep 2006
ac20400_