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

Administration Oracle Discussion :

enregistrement simultanné dans la méme table


Sujet :

Administration Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mai 2010
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 10
    Par défaut enregistrement simultanné dans la méme table
    Bonjour
    je travaille sur oracle 10g
    mon application est installé sur un serveur, et j'ai plusieurs utilistaurs qui sont connectés.
    lorsque j'ajoute un enregistrement avec la technique
    code=maxvalue ,il se peut que deux utilisateurs aient la même valeur ,ce qui pose un problème de clé primaire, j'ai essayé avec la séquence je trouve que je perds quelques numéro lorsque j'annule la tâche.
    merci de me proposer une solution

  2. #2
    Membre émérite Avatar de jkofr
    Homme Profil pro
    Senior Consultant DBA (Trivadis SA)
    Inscrit en
    Octobre 2006
    Messages
    484
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : Suisse

    Informations professionnelles :
    Activité : Senior Consultant DBA (Trivadis SA)
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 484
    Par défaut
    Hello,

    Si c'est un problème pour toi de perdre quelques numéros, alors tu peux t'en sortir en créant une table (avec storage keep) qui contiendra une ou plusieurs lignes du style

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Create table My_Keys
    (
      Key_ID    Number;
      Key_Value Number;
    )  STORAGE( BUFFER_POOL KEEP);
    Avec une seule ligne par clé.
    Tu pourra faire un select for update pour incrémenter ta clé.

    C'est une idée...
    jko

  3. #3
    Membre averti
    Inscrit en
    Mai 2010
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 10
    Par défaut
    merci c'est pas mal
    mais est ce que je peux récupérer les valeurs perdues par la séquence

  4. #4
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    Le problème ne serait-il pas pris à l'envers ? Certes, tu peux avoir un besoin particulier qui impose de ne pas avoir de trou, mais généralement, ce qui compte c'est de justifier ces trous rien de plus. Tu pourrais donc très bien ajouté une colonne à la table proposée par jkofr pour justifier le non usage d'une clé.

    Parce qu'avoir une séquence sans trou c'est surement possible mais en contrepartie tu vas devoir développer une usine à gaz pour réutiliser les numéros (genre max(Key_ID) WHERE status = 'FREE' ou UPDATE tab_seq SET ID = ID + 1) libres et ça va coûter en perf

    Pour info : http://asktom.oracle.com/pls/asktom/...:4343369880986

  5. #5
    Membre averti
    Inscrit en
    Mai 2010
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 10
    Par défaut
    merci infiniment

  6. #6
    Membre Expert

    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    536
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 536
    Par défaut
    Citation Envoyé par yesfa Voir le message
    Bonjour
    je travaille sur oracle 10g
    mon application est installé sur un serveur, et j'ai plusieurs utilistaurs qui sont connectés.
    lorsque j'ajoute un enregistrement avec la technique
    code=maxvalue ,il se peut que deux utilisateurs aient la même valeur ,ce qui pose un problème de clé primaire, j'ai essayé avec la séquence je trouve que je perds quelques numéro lorsque j'annule la tâche.
    merci de me proposer une solution
    Vous dites que vous êtes dans une application multi-utilisateurs et que vous vous êtes rendu compte qu'en utilisant code=maxvalue, il y a des chances où deux utilisateurs se retrouvent avec la même valeur pour la même clé primaire. C'est pourquoi vous avez optez pour une séquence d'Oracle; mais vous êtes gêné par les trous dans cette clé primaire.

    Mon conseil, est
    (a) d'utiliser cette séquence Oracle dans votre trigger
    (b) d'accepter les trous dans votre clé primaire.

    En effet, c'est beaucoup plus sûr et moins contraignant dans un environnement concurrent comme le votre d'opter pour les point (a) et (b) plutôt que de se laisser embarqué dans des complications qui au mieux ne feront que sérialiser vos inserts.


    Bien à vous

    Mohamed Houri

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

Discussions similaires

  1. Copier un enregistrement dans une même table
    Par slammer dans le forum Langage SQL
    Réponses: 11
    Dernier message: 04/05/2010, 23h17
  2. [MySQL] Plusieurs enregistrements à la fois dans une même table
    Par cysedbs dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 11/12/2008, 10h37
  3. Réponses: 2
    Dernier message: 03/11/2008, 00h13
  4. Réponses: 4
    Dernier message: 21/11/2007, 12h19
  5. Réponses: 2
    Dernier message: 19/10/2007, 14h33

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