O problema que você está descrevendo é chamado Write Skew.
Em princípio, o isolamento de transações SERIALIZEABLE cuida disso, mas não no banco de dados Oracle . O Oracle fornece apenas isolamento de instantâneo, mesmo quando você solicita SERIALIZABLE.
No Oracle, praticamente a única solução confiável é usar algum tipo de bloqueio. Isso não precisa necessariamente ser um bloqueio em uma linha da tabela, você também pode usar bloqueios consultivos via DBMS_LOCK para isso.