Ich arbeite da ein wenig anders.
Als Returnwert verwende ich grundsätzlich einen Indicator, so dass ich die Funktion direkt im IF aufrufen kann:

dcl-pr GetFile ind;
FileName varucs2(256) const;
Record varucs2(8000000);
end-pr;

if GetFile(FileName:Buffer);
// Tu was
endif;

Den Puffer übergebe ich nicht per CONST sondern per Referenz. Somit spare ich mir auch das Kopieren des Inhalts noch mal im Return. Der Parameter ist ebenso Ziel des SQL's.

Somit vereinfacht sich auch das Ergebnis:

exec sql .....
return SQLCODE = *zero;

Wichtig ist natürlich, dass die CCSID der Streamfile umwandelbar ist. Ich habe in einer einderen Anwendung bei einem Fehler, da ich UTF8 erwarte, noch mal den "CHGATR OBJ(...) ATR(CCSID) VALUE(1208)" durchgeführt und den Import wiederholt.