Oracle SQL: Comment lire-et-incrémenter un champ

Je suis refactoring de l'importation de données de la procédure pour une application d'entreprise et suis tombé sur un extrait de j'aimerais trouver une meilleure solution. Lors de l'importation de données que nous avons à créer une entité unique pour chaque ensemble de données et il y a un compteur dans un champ à utiliser pour attribuer l'id de façon séquentielle. Vous lisez le terrain pour obtenir la prochaine free id et l'incrémenter par la suite afin de se préparer pour la prochaine fois.

Au moment où cela est fait en deux étapes dans l'application d'origine, écrit en 'C':

   SELECT idnext FROM mytable;
   UPDATE mytable SET idnext = idnext + 1;

Bien sûr, il est une condition de concurrence ici, si plusieurs processus de faire la même chose.

Edit: Important corequis: je ne peux pas toucher la base de données/définition d'un champ, d'une séquence.

Nous sommes réécriture en perl, et j'aimerais faire la même chose, mais en mieux. Atomique solution serait sympa. Malheureusement, mes compétences SQL sont limitées, alors je me suis tourner vers la sagesse collective 🙂

Je sens la mise à jour de sql suffisamment bonne "UPDATE matable SET idnext = idnext + 1;" pourquoi avez-vous besoin de lire idnext de serveur?

OriginalL'auteur markus_b | 2010-01-08