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 :

Commit implicite OK même si commande échoue? [11gR2]


Sujet :

SQL Oracle

  1. #1
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 993
    Points : 2 499
    Points
    2 499
    Par défaut Commit implicite OK même si commande échoue?
    Bonjour,

    Un commit est fait implicitement par Oracle lorsqu'on saisit certaines commandes comme Truncate, Drop...
    La question que je me pose est : si la commande échoue, est-ce que le commit est quand même réalisé?

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SQL> Select salary from emp where id = 20;
    SALARY
    -------
    5000
     
    SQL> Update emp set salary = 6000 where id = 20;
     
    SQL> Truncate user01.dept;
    ERROR, table does not exists
     
    SQL> Rollback;
     
    SQL> Select salary from emp where id = 20;
    Est-ce que le salaire vaut 5000 ou 6000?
    D'après ce que j'ai lu je dirais 6000 mais j'aimerai une confirmation.

    Par avance merci pour les réponses.
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

  2. #2
    Expert éminent sénior 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
    Points : 11 252
    Points
    11 252
    Par défaut
    Vous n'avez pas une base Oracle sur la main pour tester vu que vous avez déjà élaboré le scénario de test ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 
    Connected as mni@parvatI
     
    SQL> Select sal from emp where empno = 7369;
          SAL
    ---------
       800,00
     
    SQL> Update emp set sal = 6000 where empno = 7369;
    1 row updated
     
    SQL> Truncate table deptt;
    Truncate table deptt
    ORA-00942: Table ou vue inexistante
     
    SQL> rollback;
    Rollback complete
     
    SQL> Select sal from emp where empno = 7369;
          SAL
    ---------
      6000,00
     
    SQL>
    Le DDL s'exécute de la manière suivante
    COMMIT
    DDL
    COMMIT

  3. #3
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 993
    Points : 2 499
    Points
    2 499
    Par défaut
    Salut mnitu,

    J'y ai pensé, je ferai ça cet après-midi mais j'aurai voulu des explications de la part de personnes plus expérimentées que moi.
    Par exemple pour
    COMMIT 1
    TRUNCATE
    COMMIT 2

    je me demandais si le COMMIT 1 n'était pas dans le code de la commande Truncate et donc si le Truncate échoue, peut-être que le COMMIT 1 n'est pas "valide".
    De ce que tu dis, je comprends que lorsqu'on fait sous SQL*Plus un Truncate, Oracle analyse la requête, détecte le Truncate et AJOUTE un Commit à mon ordre SQL saisi.

    [EDIT]
    Ca y est, j'ai fais le test. Effectivement, si le Truncate échoue, le COMMIT est quand même bien fait.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    SQL> select  sal from user01.emp where empno = 10000;
            SAL
    	-----
    	10000
     
    SQL> update user01.emp set sal = 11000 where empno = 10000;
     
    SQL> select empno, sal from user01.emp where empno = 10000;
    	SAL
    	----------
    	11000
     
    SQL> truncate table dept;
    truncate table dept
                   *
    ERROR at line 1:
    ORA-00942: table or view does not exist
     
    SQL> rollback;
     
    SQL> select sal from user01.emp where empno = 10000;
         SAL
         ----------
         11000
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

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

Discussions similaires

  1. [expect] comment boucler spawn si la commande échoue ?
    Par threepwood dans le forum Shell et commandes GNU
    Réponses: 12
    Dernier message: 18/03/2010, 17h22
  2. Réponses: 10
    Dernier message: 30/10/2006, 14h44
  3. plusieurs commandes même client
    Par pierrot67 dans le forum Bases de données
    Réponses: 5
    Dernier message: 22/05/2006, 08h36
  4. Réponses: 12
    Dernier message: 03/03/2006, 11h31
  5. [JDBC]Auto Commit Implicite (vicieux?)
    Par Jie.N dans le forum JDBC
    Réponses: 4
    Dernier message: 08/08/2005, 17h11

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