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 encontrado
-- 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
Notices | Trademarks | Downloads | Library | Support | Feedback
Copyright IBM Corporation 1999, 2006 Last updated: 5월 25, 2006
ac20400_