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 similar, poderá chamá-la a partir dos dois módulos ESQL (para os nós Compute, Banco de Dados, DatabaseInput e Filter) e a partir dos arquivos de mapeamento (usados pelo nó Mapeamento).
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)
d 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;