Seleccionar un subcampo de un campo mayor

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;	
Conceptos relacionados
Visión general de flujos de mensajes
Tareas relacionadas
Diseñar un flujo de mensajes
Definir el contenido del flujo de mensajes
Referencia relacionada
Nodo Compute
Nodo Database
Nodo Filter
Referencia de ESQL
Sentencia DECLARE
Función POSITION
Sentencia SET
Función SUBSTRING
Función TRIM
Sentencia WHILE
Avisos | Marcas registradas | Descargas | Biblioteca | Soporte | Su opinión
Copyright IBM Corporation 1999, 2006 Última actualización: 22/08/2006
ac20400_