Hallo Ihr Wissenden,

ich möchte in einem RPG-PGM mit einem prepared statement ein Dateifeld (Typ String) updaten.

Zum Ausführungszeitpunkt soll das "where"-Feld dann noch quasi "normalisiert" werden (Dadurch soll Groß/Kleinschreibung irrelevant werden, und bestimmt Zeichen sollen zum Vergleichszeitpunkt ersetzt werden).

Nun das Problem:
Unten seht ihr drei austauschbare Zeilen zum "where"-Teil des Statements.
In der ersten mein Versuch, in der Hostvariablen ein mögliches P durch ein L zu ersetzen zum Vergleichszeitpunkt. Das führt blöderweise zu einem SQL-Error "-518". Hm.

Aber:
In der zweiten Zeile ist beweisen, dass man eine Host- Variable grundsätzlich zum Vergleichszeitpunkt manipulieren kann; Das Statement funktioniert.
Und in der dritten Zeile ist bewiesen, dass man grundsätzlich zum Vergleichszeitpunkt den zu vergleichenden Wert replacen kann (Allerdings habe ich dabei keine Hostvariable verwendet, sondern eine normale, also kein prepSt).

Wenn das beides geht, warum funktioniert dann das prep.St in Zeile 1 nicht?

stmt= 'update myFile set MyField= ''X'' where +
MyField = replace(? , ''P'', ''L'') '; // 1. <-Geht nicht. Wieso -518?

// MyField = upper(?) '; // 2. <-Geht. Man kann also Host-Var's verändern

// MyField = replace(''P'' , ''P'', ''L'')'; // 3. <-Geht. Replace
funktioniert grundsätzlich,
solange keine Host-Var.

Exec sql prepare s1 from :stmt;
Exec sql execute s1 using :statusP;



Ich würde es gern verstehen, habt ihr dafür eine Erklärung?

Besten Dank schon mal,
Andy