WebSphere Message Broker, Versión 8.0.0.5 Sistemas operativos: AIX, HP-Itanium, Linux, Solaris, Windows, z/OS

Consulte la información sobre la última versión del producto en IBM Integration Bus, Versión 9.0

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 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;	
Avisos | Marcas registradas | Descargas | Biblioteca | Soporte | Comentarios

Copyright IBM Corporation 1999, 2014Copyright IBM Corporation 1999, 2014.

        
        Última actualización:
        
        Última actualización: 2015-02-28 16:58:29


Tema de tareaTema de tarea | Versión 8.0.0.5 | ac20400_