Ganz einfach, schon mal was von Hostvariablen gehört;-)?

exec sql set : MyField = upper(: MyField);

Bei Replace(?,....) weiß SQL nichts über den Typ zur Ausführung. Man kann allerding "cast(? as char(10))" in einem dynamischen SQL verwenden.
Und warum machst du das Ganze überhaupt dynamisch?

exec sql update myfile set myfield = replace(: MyField, 'P', 'L')
where myfield = upper(: MyField);

Du kannst auch die Parameter P und L wiederum in Hostvariablen setzen.