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

Oracle Discussion :

Clés primaire


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 20
    Par défaut Clés primaire
    Boujours à tous.

    J'ai un souci avec une table, lorsque je supprime un enregistrement dans celle-ci je me retrouve donc dans cette configuration :

    1 enregistrement1
    2 enregistrement2
    4 enregistrement4

    J'ai un script d'insertion qui compte le nombre de ligne dans cette table et qui doit inserer un nouvel enregistrement, evidement là mon compteur est à 3 donc mon prochain ID sera 4 ce qui ne marche pas.

    Je ne sais pas comment contourner ce problème.

    Merci d'avance.

  2. #2
    Membre Expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 890
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 890
    Par défaut
    Bonjour,

    Il faut absolument utiliser des sequences pour ce genre d'attribution d'identifiant unique.

    A+

  3. #3
    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
    Pourquoi n'utilises-tu pas une séquence ?

  4. #4
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 20
    Par défaut
    C'est effectivement une piste que j' "explore" mais étant débutant je ne vois pas encore la maniere de les utiliser.

    Si quelqu'un peu m'expliquer brièvement.

    Je parcoure actuellement les tutos.



    Merci pour vos réponse.

  5. #5
    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
    Fais une recherche avancée sur le forum et tu trouveras pleins d'exemples d'utilisation de séquences, notamment celui-là :
    http://www.developpez.net/forums/vie...ght=s%E9quence

  6. #6
    Membre expérimenté Avatar de VinceTlse
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 163
    Par défaut
    Bonjour,

    http://oracle.developpez.com/faq/?pa...#autoincrement

    Une séquence possède deux fonctions:
    - currval qui retourne la valeur courante
    - nextval qui retourne la valeur suivante
    Ainsi lorsque que tu insères un enregistrement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into TA_TABLE (COL1,COL2) VALUES (TA_SEQUENCE.nextval, 'blablabla');

  7. #7
    Membre éprouvé
    Inscrit en
    Janvier 2005
    Messages
    129
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 129
    Par défaut
    C'est facile d'utiliser une séquence.

    Tu lui définit un début, une valueur d'incrémentation et hop c'est parti. Tu as d'autre parametres facultatif -> voir CREATE SEQUENCE ...

    Pour l'utiliser tu as deux syntaxe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    nom_sequence.CURRVAL
    nom_sequence.NEXTVAL
    .CURRVAL te retourne la valeure acutelle de ta séquence
    .NEXTVAL te retourne la valeure incrémentée.

    Tu peux consulter ca grace la table DUAL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT nom_sequence.CURRVAL FROM dual;
    Dans ton cas pour une insertion :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    INSERT INTO ma_table VALUES (nom_sequence.NEXTVAL; value2; value3 ...)
    Bonne chance

  8. #8
    Membre Expert Avatar de nuke_y
    Profil pro
    Indépendant en analyse de données
    Inscrit en
    Mai 2004
    Messages
    2 076
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant en analyse de données

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 076
    Par défaut
    nous on le fait quand on peut pas utiliser des séquences. Ce qu'on fait c'est qu'on ne compte pas le nombre de ligne mais on récupère le max de l'identifiant. Dans ton cas ça donne ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select max(identifiant) from matable
    et ça te donnera 4. Tu rajoutes 1 et c'est bon. Après le problème c'est que si 2 process font ça simultanément tu auras 2 enregistrements à insérer avec le même numéro et un des deux sera rejeté (violation de clé primaire). Et tu chiales parce qu'il faut implémenter une gestion de ce genre d'erreur.

    Utilité ? Tu n'es pas dépendant de la base de donnée sur laquelle tu t'appuies (utile pour des applications qui peuvent fonctionner sur toutes les bases).

    Mais si tu es full Oracle ou que tu t'entraînes juste, utilise une séquence.

  9. #9
    Membre Expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 890
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 890
    Par défaut
    Petite remarque : il est interessant d'utiliser la sequence de manière "transparente" par le biais des triggers, ainsi, dans le code d'insertion on ne fait pas allusion à la sequence, mais uniquement dans le trigger associé à l'insertion

    A+

  10. #10
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 20
    Par défaut
    Un grand merci à tous, c'est génial et ça marche !

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

Discussions similaires

  1. Requête sur table à double clés primaires
    Par darkian dans le forum Langage SQL
    Réponses: 4
    Dernier message: 04/03/2005, 18h28
  2. [C#] Probleme sur les clés primaires composites
    Par stardeus dans le forum Windows Forms
    Réponses: 7
    Dernier message: 13/02/2005, 00h28
  3. Comment avoir 2 clés primaires dans une table
    Par Guigui_ dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 18/01/2005, 09h29
  4. [SGBDR]Clés primaires?
    Par vsavoir dans le forum Décisions SGBD
    Réponses: 7
    Dernier message: 21/11/2004, 23h48
  5. [postgresql]creer une table avec plusieurs clés primaire??
    Par perlgirl dans le forum Langage SQL
    Réponses: 2
    Dernier message: 09/11/2004, 18h24

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