Warum nicht in einem Statement?
insert into vkaufpos ( <Liste ohne PK> ) select <Liste ohne PK> from vkaufpos where id = :vorhandene_id;
das ist natürlich auch ne Möglichkeit, und wahrscheinlich auch performanter.
Sicher ist beides die Überlegung wert (insert und stored proc)
Aber was kann die Ursache des Fehlers sein, irgend ein Speicherproblem oder was sonst?