"for update" verwende ich bei der DB2/400

Fehler behandle ich hier in der Regel gar nicht, da dies wiederum Sache des Client sein soll (z.B. Lock-Timeout, der eigentlich nicht eintreten sollte).
Was mache ich?
begin in autonomous transaction
Do begin
select first 1 a.lockvalue from zgloballock a with lock into :xvalue
Do begin
execute statement :xcmd;
when any do begin exception; end
end end
In diesem Fall ist "xcmd" das auszuführende SQL wie "create table ...".
Wegen der Fehlerbehandlung funktioniert dies tatsächlich nur mit dem "when any do begin exception; end", da ein auftretender Fehler dann an den Client weitergeleitet wird.
Wird die autonome Transaktion korrekt beendet, gibts einen Commit, ansonsten einen Rollback.
Da ich alle kritischen und konkurierenden SQL's auf diesem Weg ausführe kann es keine Konkunrenz-Fehler mehr geben.