Habe es jetzt auch gänzlich ohne RETURN versucht, aber im RPG ist der sqlcode immer noch 0.
Wenn ich die Procedure debugge, dann ist der sqlcode darin -803.
Ein get diagnostics liefert ebenfalls 0 zurück.
Im Joblog steht aber:

Bestehender Datenbereichseintrag für einmaligen Schlüsselindex enthält
doppelte Schlüssel.
COMMIT-Operation schlug aufgrund der Verletzung einer Integritätsbedingung
fehl.
ODP nicht gelöscht.
ODP nicht gelöscht.
Doppelter Schlüsselwert angegeben.
Anweisung CALL beendet.
Anweisung GET DIAGNOSTICS beendet.