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 :

Différences execute immediate et commit


Sujet :

SQL Oracle

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 71
    Points : 34
    Points
    34
    Par défaut Différences execute immediate et commit
    Bonjour,
    Existe t'il des différences de performances entre ces deux solutions :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    delete * from table; commit;
    execute immediate 'delete * from table';
    Merci.

  2. #2
    Rédactrice

    Avatar de kalyparker
    Femme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Janvier 2007
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 327
    Points : 2 998
    Points
    2 998
    Par défaut
    Bonjour,

    A priori il n'y a aucune différence. execute immediate permet simplement d'exécuter une commande DDL ou DML dans un bloc pl/sql.
    Donc je dirais que les 2 sont identiques au niveau perf.

    voili, voilou

  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
    Points : 3 609
    Points
    3 609
    Par défaut
    Non, elles ne sont pas identiques puisque dans un cas tu commit dans l'autre non.

    NB : si tu delete toute ta table pourquoi ne pas faire un truncate table ?

  4. #4
    Rédactrice

    Avatar de kalyparker
    Femme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Janvier 2007
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 327
    Points : 2 998
    Points
    2 998
    Par défaut
    Non, elles ne sont pas identiques puisque dans un cas tu commit dans l'autre non.
    Sauf erreur de ma part, la commande execute immediate fait un commit implicite.

    NB : si tu delete toute ta table pourquoi ne pas faire un truncate table ?
    C'est pas moi qui dirais le contraire

  5. #5
    Membre éprouvé Avatar de Yorglaa
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    845
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 845
    Points : 931
    Points
    931
    Par défaut
    non, je ne crois pas que le execute immédiate fasse un commit implicite...

    le fait est que le execute immediate est souvent employé dans du PL/SQL pour faire du DDL qui, LUI, fait du commit implicite !

    sinon, pour le truncate ce n'est pas toujours possible en fonction des contraintes sur la table.
    de plus le truncate est dangereux puisqu'il ne peux pas s'annuler avec un rollback... donc oublie le truncate dans une PL/SQL où tu souhaite gèrer l'intégralité d'une transaction.
    Et enfin, pire que tout, le truncate est une opération DDL, et donc va COMMITER les opérations précédentes, que tu le veuille ou non !!!!

  6. #6
    Rédactrice

    Avatar de kalyparker
    Femme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Janvier 2007
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 327
    Points : 2 998
    Points
    2 998
    Par défaut
    le fait est que le execute immediate est souvent employé dans du PL/SQL pour faire du DDL qui, LUI, fait du commit implicite !
    Merci pour cette précision, j'ai appris un truc là !

  7. #7
    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
    Points : 3 609
    Points
    3 609
    Par défaut
    Citation Envoyé par Yorglaa
    sinon, pour le truncate ce n'est pas toujours possible en fonction des contraintes sur la table.
    de plus le truncate est dangereux puisqu'il ne peux pas s'annuler avec un rollback... donc oublie le truncate dans une PL/SQL où tu souhaite gèrer l'intégralité d'une transaction.
    Et enfin, pire que tout, le truncate est une opération DDL, et donc va COMMITER les opérations précédentes, que tu le veuille ou non !!!!
    De manière générale je suis d'accord avec toi, mais comme on ne sait pas pourquoi ni comment pegase06 utilise son delete, le truncate peut-être une solution intéressante, d'autant plus qu'il fait un commit juste après son delete. C'est pourquoi je posais la question.

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    Citation Envoyé par kalyparker
    Merci pour cette précision, j'ai appris un truc là !
    attention, LUI désigne le DDL et non le PL/SQL

  9. #9
    Rédactrice

    Avatar de kalyparker
    Femme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Janvier 2007
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 327
    Points : 2 998
    Points
    2 998
    Par défaut
    attention, LUI désigne le DDL et non le PL/SQL
    J'avais compris Fred_D

    Pour faire un commit d'un bloc pl/sql il faut utiliser /

    Mais là, je crois que l'on s'éloigne un peu du sujet de départ...

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    je préfère préciser pour nos lecteurs qui aurait pu se méprendre

  11. #11
    Membre expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Points : 3 597
    Points
    3 597
    Par défaut
    Pour faire un commit d'un bloc pl/sql il faut utiliser /

    Non, le "/" ne fait en lui-même ni COMMIT, ni ROLLBACK il sert uniquement à exécuter un bloc PL/SQL ou a réexécuter la dernière commande:
    http://download-uk.oracle.com/docs/c...4.htm#i2696794

  12. #12
    Rédactrice

    Avatar de kalyparker
    Femme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Janvier 2007
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 327
    Points : 2 998
    Points
    2 998
    Par défaut
    Non, le "/" ne fait en lui-même ni COMMIT, ni ROLLBACK il sert uniquement à exécuter un bloc PL/SQL
    Ok, je sors

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

Discussions similaires

  1. EXECUTE IMMEDIATE commit
    Par zdig10 dans le forum PL/SQL
    Réponses: 7
    Dernier message: 11/04/2010, 15h56
  2. Réponses: 10
    Dernier message: 30/10/2006, 14h44
  3. Equivalents de EXECUTE IMMEDIATE ... RETURNING INTO ... ?
    Par swirtel dans le forum Langage SQL
    Réponses: 4
    Dernier message: 31/05/2005, 10h21
  4. [pl/sql] execute immediate
    Par Nadine dans le forum Oracle
    Réponses: 16
    Dernier message: 23/02/2005, 17h37
  5. Execute immediate et nom reserves
    Par nuke_y dans le forum Oracle
    Réponses: 3
    Dernier message: 22/11/2004, 18h17

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