Möglicherweise verarbeitet Ihr Nachrichtenfluss eine Nachricht, die Teilfelder mit Begrenzern enthält. Sie können ESQL so codieren, dass ein Teilfeld aus dem Umgebungsinhalt extrahiert wird, wenn Sie die Begrenzer des Teilfelds kennen.
Wenn Sie eine Funktion erstellen, die diese oder eine ähnliche Task ausführt, können Sie sie sowohl aus ESQL-Modulen (für Compute-, Datenbank-, DatabaseInput- und Filter-Knoten) als auch aus Zuordnungsdateien (werden vom Mapping-Knoten verwendet) aufrufen.
Die nachfolgende Beispielfunktion extrahiert ein bestimmtes Teilfeld einer Nachricht, das durch ein bestimmtes Zeichen begrenzt ist.
CREATE FUNCTION SelectSubField (SourceString CHAR, Delimiter CHAR, TargetStringPosition INT)
d RETURNS CHAR
-- Diese Funktion gibt eine Unterzeichenfolge an Parameterposition 'TargetStringPosition' im
-- übergebenen Parameter 'SourceString' zurück. Hier ein mögliches Verwendungsbeispiel:
-- SelectSubField(MeinQuellfeld,' ',2) wählt das zweite Teilfeld aus dem
-- Feld 'MeinQuellfeld' mit einem Leerzeichen als Begrenzer. Wenn 'MeinQuellfeld' den Wert
-- "Erstes Zweites Drittes" hat, gibt die Funktion den Wert "Zweites" zurück.
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 ist 0, wenn der Begrenzer nicht gefunden wurde
-- Schleife verlassen
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
-- Alles, was hinter dem Begrenzer steht, aus der Zeichenfolge entfernen
SET WorkingSource = SUBSTRING(WorkingSource FROM 1 FOR DelimiterPosition);
SET WorkingSource = TRIM(TRAILING Delimiter FROM WorkingSource);
END IF;
RETURN WorkingSource;
END;