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 realiza esta tarea, o una similar, puede invocarla desde los módulos ESQL (para los nodos Compute, Database y Filter) y desde los archivos de correlación (utilizados por los nodos DataDelete, DataInsert, DataUpdate, Extract, Mapping y Warehouse).
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) 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;