IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

[Oracle 10g] renumérotez les records d'une table


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de awalter1
    Inscrit en
    Août 2004
    Messages
    994
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 994
    Par défaut [Oracle 10g] renumérotez les records d'une table
    Bonjour,

    J'ai une table défini comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    CREATE TABLE ENV
    (POINT_NAME VARCHAR2(5) NOT NULL,
    INDEX_NUMBER INTEGER NOT NULL,
    COORD INTEGER NOT NULL)
    ;
    CREATE UNIQUE INDEX ENV_I1
    ON ENV
    (POINT_NAME ASC,
    INDEX_NUMBER ASC)
    ;
    Le champ INDEX représente un numéro qui s'incrémente de 10 en 10. Il arrive que suite à des suppressions de record, il y ait des trous dans la numérotation. Je voudrais alors une requète UPDATE pour renuméroter tous les records pour retrouver une séquence ordonnée 10, 20, 30 ... là ou j'avais peut être 20,50,60 ... Je n'arrive pas à le faire en une requète SQL.
    Je travaille en Oracle 10i.
    Merci de votre aide

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Par défaut
    Citation Envoyé par awalter1
    Je voudrais alors une requète UPDATE pour renuméroter tous les records pour retrouver une séquence ordonnée 10, 20, 30 ... là ou j'avais peut être 20,50,60 ... Je n'arrive pas à le faire en une requète SQL.
    Et si vous devez restaurer une partie d'une sauvegarde ou simplement restaurer un enregistrement, etc. vous allez avoir une violation de vos contraintes d'intégrité.
    Les trous occasionés par les séquences ne doivent JAMAIS être comblés et TOUJOURS être considérés commer perdus.

    A bon entendeur.

  3. #3
    Membre éprouvé Avatar de awalter1
    Inscrit en
    Août 2004
    Messages
    994
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 994
    Par défaut
    merci d'avoir répondu.
    Mais mon champ INDEX_NUMBER n'est pas une séquence (au sens Oracle). j' ai utilisé le terme séquence à mauvais escient, il fallait comprendre suite croissante car ce champ sert à conserver l'ordre choisi par l'utilisateur lors de ces actions d'insertion, update, suppression.

  4. #4
    Membre Expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Par défaut
    Il ne fait pas partie de la clé d'unicité de la table ?

  5. #5
    Membre éprouvé Avatar de awalter1
    Inscrit en
    Août 2004
    Messages
    994
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 994
    Par défaut
    On ne gère pas de clé, ou plutot c'est fait au moyen de l'unicité des index. Mon champ INDEX_NUMBER fait partie de cet index. c'est là que c'est embêtant car on ne peut pas numérotez en partant de 10 et en ajoutant 10 et ainsi de suite car on va tomber probablement sur un index déjà existant et donc pb d'unicité. Pour bien faire il faudrait trouver les trous et renuméroter les records suivants à partir de là : update ENV set INDEX_NUMBER =INDEX_NUMBER +10 where INDEX_NUMBER >= ??? ... Mais pour trouver les trous et relier le tout, je sèche.
    merci

  6. #6
    Expert confirmé
    Homme Profil pro
    Big Data / Freelance EURL
    Inscrit en
    Mars 2003
    Messages
    2 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Big Data / Freelance EURL

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 124
    Par défaut
    il faudrait partir du nombre max de lignes*10 et soustraire de 10 en 10.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 12/08/2011, 22h37
  2. Réponses: 4
    Dernier message: 07/07/2010, 10h33
  3. Réponses: 2
    Dernier message: 27/03/2010, 11h48
  4. Réponses: 6
    Dernier message: 01/08/2006, 19h12
  5. [ORACLE 10g] Droits en ligne sur une table
    Par Cerberes dans le forum Oracle
    Réponses: 4
    Dernier message: 04/02/2005, 11h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo