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 :

[XE] Transaction atomique avec plusieurs INSERT


Sujet :

SQL Oracle

  1. #1
    Membre à l'essai
    Inscrit en
    Août 2006
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 19
    Points : 19
    Points
    19
    Par défaut [XE] Transaction atomique avec plusieurs INSERT
    Bonjour tout le monde,

    Je me bats et cherche depuis ce matin comment faire une transaction qui me COMMIT l'ensemble de mes INSERT, uniquement si tous les INSERT sont valides.

    Voila un bout de code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    COMMIT; 
     
    SET TRANSACTION READ WRITE NAME 'Essai'; 
     
    INSERT INTO Tent values (7, 'Uranus', 4, 'High-standing Tent 4 places');
    INSERT INTO Tent values (2, 'Neptune', 2, 'Simple Double Tent');
     
    COMMIT;
    Dans mon cas, le premier INSERT est valide, mais le deuxième ne l'est pas (erreur d'intégrité), je pensais que, écrit de cette manière, si il y'avait un INSERT qui ne passe pas dans ma transaction, alors l'ensemble ne passe pas, or le premier INSERT est bien commité, même si le deuxième n'est pas valide.

    En fait je voudrais que si un INSERT pose problème, alors il y'est un ROLLBACK sur toute la transaction.

    Est-ce possible?

    Merci de votre aide,

    Cdt.

  2. #2
    Membre chevronné

    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
    Points : 1 775
    Points
    1 775
    Par défaut
    Pourquoi ne pas capturer l'erreur en encadrant vos traitements dans un bloc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    BEGIN
      ...
    EXCEPTION WHEN ... [ OR ... ] THEN
      -- échec d'au moins une insertion 
     ...
    END;
    Modérateur des forums Oracle et Langage SQL
    Forum SQL : je n'interviens PAS plus de 4 fois dans une discussion car si c'est nécessaire cela prouve généralement que vous n'avez pas respecté : les règles du forum

  3. #3
    Membre à l'essai
    Inscrit en
    Août 2006
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 19
    Points : 19
    Points
    19
    Par défaut
    Bonjour,

    Merci de votre réponse, en faisant de cette manière, il semble que cela marche:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    BEGIN
    	INSERT INTO Tent values (9, 'Uranus',  4, 'High-standing Tent 4 places');
    	INSERT INTO Tent values (2, 'Neptune', 2, 'Simple Double Tent');
    EXCEPTION
    	WHEN OTHERS THEN ROLLBACK;
    END;
    Merci beaucoup!

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

Discussions similaires

  1. [PHP 5.0] Insertion avec plusieurs mots dans une colonne
    Par cyrilherve dans le forum Langage
    Réponses: 4
    Dernier message: 21/03/2009, 08h41
  2. [Prototype] Faire plusieurs insertions
    Par hugo69 dans le forum Bibliothèques & Frameworks
    Réponses: 1
    Dernier message: 21/05/2008, 14h59
  3. insertion dans table avec plusieurs clés étrangères
    Par philippe281281 dans le forum Administration
    Réponses: 2
    Dernier message: 14/06/2006, 18h35
  4. Requête : Insert avec plusieurs tables
    Par bleu_ciel dans le forum Access
    Réponses: 4
    Dernier message: 01/06/2006, 21h42
  5. Réponses: 3
    Dernier message: 19/11/2004, 21h48

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