achso
habs ausprobiert, das funktioniert auch:

dcl-ds ds_auftrag;
firma zoned(2);
sparte zoned(1);
verkaufshaus zoned(2);
auftrag zoned(4);
end-ds;

exec sql declare mein_cursor cursor for
select firma from firmadatei where firma = 1;
exec sql open mein_cursor;
exec sql fetch mein_cursor into :ds_auftrag.firma;
if sqlcode = 0;
ds_auftrag = ds_auftrag;
endif;
exec sql close mein_cursor;

Firma wird gefüllt, der Rest natürlich nicht.
Funktioniert auch bei Verkaufshaus, liegt also nicht am ersten Feld.