Si potrebbe avere un flusso di messaggi che elabora un messaggio che contiene dei campi secondari delimitati. E' possibile codificare ESQL per estrarre un campo secondario dal contenuto circostante se si conoscono i delimitatori del campo secondario.
Se si crea una funzione che esegue questa attività, o un'attività simile, è possibile richiamarla sia dai moduli ESQL (per i nodi Compute, Database e Filter) che dai file di mappatura (utilizzati dai nodi DataDelete, DataInsert, DataUpdate, Extract, Mapping e Warehouse).
Il seguente esempio di funzione estrae un particolare campo secondario di un messaggio che è delimitato da un carattere specifico.
CREATE FUNCTION SelectSubField (SourceString CHAR, Delimiter CHAR, TargetStringPosition INT) RETURNS CHAR -- Questa funzione restituisce una stringa secondaria sulla posizione di parametro TargetStringPosition all'interno del -- parametro passato SourceString. Un esempio di questo utilizzo potrebbe essere: -- SelectSubField(MySourceField,' ',2) che selezionerà il secondo campo secondario dal -- campo MySourceField delimitato da un vuoto. Se MySourceField ha il valore -- "First Second Third" la funzione restituirà il valore "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 sarà 0 se non si trova il delimitatore -- uscire dal loop 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 -- Rimuovere dalla stringa qualsiasi valore che segua il delimitatore SET WorkingSource = SUBSTRING(WorkingSource FROM 1 FOR DelimiterPosition); SET WorkingSource = TRIM(TRAILING Delimiter FROM WorkingSource); END IF; RETURN WorkingSource; END;