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

SQL Oracle Discussion :

insertion ou update selon le cas


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    228
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Décembre 2005
    Messages : 228
    Par défaut insertion ou update selon le cas
    Bonjour,

    j'ai besoin de faire une insertion ou un update selon qu'un enregistrement existe ou pas. Mon ami google m'a alors proposé de faire un merge. Mon problème, c'est que cette requete peut etre executée (pour un meme enregistrement) en meme temps par 2 processus distincts. Du coup, un des 2 devrait faire une insertion puis l'autre un update.

    Résultat : une requete est executée et avant qu'elle soit finie, la meme est executée (meme id qui est une primary key !!). Du coup quand une des deux se finit, un enregistrement a été créé mais quand l'autre se termine, un autre est en train d'être crée (avec donc le meme id) mais évidemment, cela ne fonctionne pas (par contre, je n'ai aucune exception pour cela!!).

    Comment dois-je faire pour contourner ce problème ?

  2. #2
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Je ne pense pas que tu est assez clair dans la description du problème ; l’emploi ou pas du merge ne devrait rien changer. Peux tu détailler ?
    Le fait que merge est exécuté simultanément pour le même id devrait générer une enregistrement dans une des sessions et échouer avec une violation du contrainte d’unicité dans l’autre.

  3. #3
    Membre Expert Avatar de fatsora
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 103
    Par défaut
    Quelle est la version Oracle ?


    mais est ce que la 2e transaction ne fait elle pas un update (car l'insertion a ete
    faite)
    c'est ptet pour ca qu'il n'y a pas demessage d'erreur ?

    fais voir le code ....

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    228
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Décembre 2005
    Messages : 228
    Par défaut
    Suite à ta remarque sur la précision de ma description, j'ai relancé des tests. Il arrive parfois que tout fonctionne bien (cela doit être parce qu'il y a eu un petit temps mort qui a permis à une des requetes de s'executer), parfois j'ai deux insertions et parfois j'en ai une des deux qui ne produit aucun resultat (pas de violation du contrainte d’unicité).

    Je me demande quel genre de verrou est posé lors d'un merge ?

    Ne devrais-je pas verrouiller la table ? Si oui, comment ?

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    228
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Décembre 2005
    Messages : 228
    Par défaut
    fatsora : j'ai mis du temps à répondre et je n'avais pas vu ton message...

    Le problème, c'est que j'ai 3 comportements possibles et je ne m'explique pas pourquoi.

  6. #6
    Membre Expert Avatar de fatsora
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 103
    Par défaut
    essaie ca

    quand il n'y a pas de violation, c'est ptet des updates ?



    http://www.quest-pipelines.com/newsletter-v4/0903_D.htm

    il permet de voir les lignes updates, insérés


    quelle version oracle utilises-tu ?

  7. #7
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Essayez peut-être de mettre du cache au niveau de la séquence qui gère la PK.

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    228
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Décembre 2005
    Messages : 228
    Par défaut
    Je rectifie ce que j'ai dit auparavant car après d'autres tests, je n'ai que 2 cas : soit j'ai un insert puis un update (bien ce que je veux), soit j'ai 2 insert (en fait, je n'ai pas d'id qui s'incrémente automatiquement, je le fais à la main avec une sequence lors d'un insert dc il ne peut y a voir de violation de contrainte d'unicité).

    Le problème doit dc etre sur le niveau de lock de mes merge, non ?

    PS : désolé, j'ai l'impression d'être lundi matin très tôt...^^

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 18/01/2008, 15h58
  2. [Debutant] Insert ou update...
    Par kluh dans le forum Oracle
    Réponses: 15
    Dernier message: 13/07/2005, 14h35
  3. événement sur INSERT, DELETE, UPDATE
    Par papouAlain dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 24/12/2004, 15h40
  4. [Débutant][PS] modifier un insert en update
    Par franculo_caoulene dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 19/05/2004, 16h33
  5. Réponses: 2
    Dernier message: 05/01/2004, 11h23

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