Vielleicht noch eine Anmerkung zu der SQL-Geschichte:
1. Ein Trim ist nicht unbedingt erforderlich, wenn die Host-Variable mit variabler Länge definiert wurde und die führenden/folgenden Blanks bereits vorab entfernt wurden. (Ein zusätzlicher SQL-TRIM ist natürlich auf alle Fälle sicherer.

2. Auf die Konvertierung mit UPPER oder LOWER kann man verzichten, wenn man die Sortierreihenfolgen LANGIDSHR verwendet. Große und kleine Buchstaben erhalten dann die gleiche Wertigkeit. Die Sortierreihenfolge kann in dem SET OPTION Statement gesetzt werden. Dabei ist allerdings zu beachten, dass die gesetzte Sortierreihenfolge unversell, für alle SQL-Statments gilt und innerhalb des Moduls nicht mehr geändert werden kann. Es macht jedoch durchaus Sinn sich alle Funktionen, mit denen caseinsensitive verglichten, durchsucht oder geändert werden in einem einzigen Modul zu hinterlegen und dieses in ein Service-Programm zu binden.

3. Ich würde auch die % Zeichen im SQL-Statement hinterlegen.

Code:
Exec SQL  Set Option SortSeq = *LangIdShr, ... weitere Optionen;

Exec SQL  Set :isFound = Case When :HostVar Like '%' concat Trim(:Vergleich) concat '%'
                               Then 1 else 0 End;
oder

Code:
Exec SQL Set :Position = PosStr(Trim(:Vergleich), Trim(:HostVar));
oder Locate funktioniert wie Posstr, nur dass es einen optionalen 3 Parameter hat über den die Position ab der gesucht werden soll angegeben werden kann.

Code:
Exec SQL Set :Position = Locate(Trim(:HostVar), Trim(:Vergleich));
Birgitta