Es posible que tenga un flujo de mensajes que procesa un mensaje que contiene subcampos delimitados. Puede codificar ESQL para extraer un subcampo del contenido que lo rodea si conoce los delimitadores del subcampo.
Si crea una función que lleva a cabo esta tarea, o una similar, puede invocarla desde los módulos ESQL (para los nodos Compute, Database, DatabaseInput y Filter) y desde los archivos de correlación (utilizados por el nodo Mapping).
El siguiente ejemplo de función extrae un subcampo determinado de un mensaje que está delimitado por un carácter específico.
CREATE FUNCTION SelectSubField
(SourceString CHAR, Delimiter CHAR, TargetStringPosition INT)
d RETURNS CHAR
-- Esta función devuelve una subserie en la posición de parámetro TargetStringPosition del
-- parámetro SourceString pasado. Lo siguiente puede ser un ejemplo de uso:
-- SelectSubField(MySourceField,' ',2) que seleccionará el segundo subcampo del
-- campo MySourceField delimitado por un espacio en blanco. Si MySourceField tiene el valor
-- "First Second Third", la función devolverá el 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 si no se encuentra el delimitador
-- salir del bucle
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
-- Eliminar todo lo que sigue al delimitador de la serie de caracteres
SET WorkingSource = SUBSTRING(WorkingSource FROM 1 FOR DelimiterPosition);
SET WorkingSource = TRIM(TRAILING Delimiter FROM WorkingSource);
END IF;
RETURN WorkingSource;
END;