Reason Code 6 bei SQLCODE 312 bedeutet:
Die Variable ist eine Konstante und kann nicht geändert werden.

Ihr definiert also F-Bestimmungen, um Felder aus embedded SQL zu füllen und habt zusätzlich noch eine externe unqualifizierte Datenstruktur???
Nicht unbedingt die beste Lösung!

Alle Host-Variablen, die befüllt werden (unabhängig davon, ob es sich um Dateifelder handelt oder Variablen) müssen mit einem führenden Doppelpunkt angegeben werden, was in Deinem Beispiel nicht der Fall ist.
Das war eine Unsauberkeit, die schon immer dokumentiert war, aber früher (vor 5.1 oder so) funktioniert hat. Heute wird das geprüft und führt zu einem Fehler.

Warum braucht ihr die F-Bestimmungen überhaupt? Für zusätzlichen native I/O?
Wenn nein! Nimm die F-Bestimmungen raus!
Externe Datenstrukturen sind normalerweise im embedded SQL kein Problem, sofern man die Hostvariablen (Datenstruktur und/oder Unterfelder) mit einem führenden Doppelpunkt angibt.

Die Compile-Option *LVL2 braucht man i.Ü. bloß um verschachtelte Copy-Strecken in denen Variablen-Definitionen hinterlegt sind aufzulösen. Hat also mit Eurem Problem nichts zu tun.