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

PL/SQL Oracle Discussion :

EXECUTE IMMEDIATE commit


Sujet :

PL/SQL Oracle

  1. #1
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2009
    Messages : 183
    Points : 79
    Points
    79
    Par défaut EXECUTE IMMEDIATE commit
    Bonjour,
    je pense que oracle met un temps de réponse avant de faire le commit donc je voulais savoir est ce qu'il y' a un moyen ou une variable a paramétrer dans oracle afin d'établir un commit instantané des procédures.
    j'ai déjà crée les procédures donc avoir comme solution ajouter la commande commit ou EXECUTE IMMEDIATE après chaque insertion ou mis a jour n'est pas efficace surtout que le nombre de mes procédures stockées dans la base de données dépasse 500 procédures!!
    Merci pour vous

  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
    Disons que le commit est plutôt instantané donc c'est quoi votre problème ?
    Faire un commit après chaque insert/update etc. est une mauvaise chose.

  3. #3
    Membre éprouvé Avatar de star
    Homme Profil pro
    .
    Inscrit en
    Février 2004
    Messages
    916
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Corée Du Nord

    Informations professionnelles :
    Activité : .

    Informations forums :
    Inscription : Février 2004
    Messages : 916
    Points : 1 091
    Points
    1 091
    Par défaut
    Sinon si tu as une baie sous la main, passe en mode write through au niveau du cache. Le commit sera alors plus qu'instantané

    .

  4. #4
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2009
    Messages : 183
    Points : 79
    Points
    79
    Par défaut
    Bonjour,
    mnitu peut être j'ai pas bien expliqué mon problème . en faite j'ai crée des procédures sans mettre à la fin de chaque transaction un commit par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    create or replace PROCEDURE "ADDACTRECCLT" 
    (
    inrec in nvarchar2,  
    inact in nvarchar2
    )  
    AS  
    BEGIN  
    INSERT INTO ActRecClt (NAct,CodeRecClt) VALUES ( inact,inrec);  
    end ;
    j'ai oublié de mettre le commit; a la fin de l'instruction insert :
    INSERT INTO ActRecClt (NAct,CodeRecClt) VALUES ( inact,inrec);
    j'ai oublié ->commit;
    donc je pourrais pas refaire toutes les procédures en y ajoutant la commande commit .
    si je met pas l'instruction commit j'ai remarqué que l'effet(l'exécution) de la procédure n'est pas instantané; donc comment faire pour que l'effet de la procédure sera instantané sans que je serai obligé à ajouter la commande commit à tous les procédures voila j'espère que j'ai bien expliqué.
    star je m'excuse j'ai pas compris ta solution veuillez S.V.P plus de détails.ok
    merci pour tous.

  5. #5
    Membre régulier Avatar de Doracle
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Avril 2010
    Messages : 60
    Points : 74
    Points
    74
    Par défaut
    En cherchant j'ai pu trouver une solution à votre souci, mais ce ne correspond pas exactement :
    Il y a la requête "SET AUTOCOMMIT ON" qui existe et qui permet donc d'automatiser la validation des ordres DML. Seulement c'est une reqûete SQL*Plus donc qui a une durée de vie égale à la durée de votre session ...

    De plus c'est déconseillé comme le disait mnitu !

    Pour plus d'infos : http://download.oracle.com/docs/cd/B....htm#sthref896

  6. #6
    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
    Citation Envoyé par zdig10 Voir le message
    Bonjour,
    mnitu peut être j'ai pas bien expliqué mon problème . en faite j'ai crée des procédures sans mettre à la fin de chaque transaction un commit par exemple:

    ...
    j'ai oublié de mettre le commit; a la fin de l'instruction insert :
    INSERT INTO ActRecClt (NAct,CodeRecClt) VALUES ( inact,inrec);
    j'ai oublié ->commit;
    donc je pourrais pas refaire toutes les procédures en y ajoutant la commande commit .
    ...
    Mettre un commit à la fin de chaque procédure est erroné. Le commit représente la fin de la transaction et c’est très rare qu’une transaction contient un seule ordre SQL. Donc mettez le commit à l’extérieur des procédures à la frontière donc des transactions.

    Citation Envoyé par zdig10 Voir le message
    ...
    si je met pas l'instruction commit j'ai remarqué que l'effet(l'exécution) de la procédure n'est pas instantané; donc comment faire pour que l'effet de la procédure sera instantané sans que je serai obligé à ajouter la commande commit à tous les procédures voila j'espère que j'ai bien expliqué.
    C’est vous qui le dit il ne vous reste qu’à la nous démontrer. Sinon lisez Oracle Concepts pour mieux comprendre que est-ce que fait le commit.

    Typically, a commit is a fast operation, regardless of the transaction size. The speed of a commit does not increase with the size of the data modified in the transaction. The lengthiest part of the commit is the physical disk I/O performed by LGWR. However, the amount of time spent by LGWR is reduced because it has been incrementally writing the contents of the redo log buffer in the background.

  7. #7
    Membre éprouvé Avatar de star
    Homme Profil pro
    .
    Inscrit en
    Février 2004
    Messages
    916
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Corée Du Nord

    Informations professionnelles :
    Activité : .

    Informations forums :
    Inscription : Février 2004
    Messages : 916
    Points : 1 091
    Points
    1 091
    Par défaut
    star je m'excuse j'ai pas compris ta solution veuillez S.V.P plus de détails.ok
    Sais-tu ce qu'est une bais de disques ?

    .

  8. #8
    Expert éminent
    Avatar de pachot
    Homme Profil pro
    Developer Advocate YugabyteDB
    Inscrit en
    Novembre 2007
    Messages
    1 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Developer Advocate YugabyteDB
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 822
    Points : 6 446
    Points
    6 446
    Billets dans le blog
    1
    Par défaut
    Bonjour,
    ... l'effet de la procédure sera instantané ...
    Je pense que tu fais une confusion: tu exécutes tes procédures, et tu regardes à partir d'une autre session l'état de la base. Et comme tu ne vois pas tout de suite les modifications faites par les procédures, tu pense qu'elles sont longues.
    Lorsque tu commite souvent, alors tu vois tout de suite les modifications à partir d'une autre session, et tu pense qu'elles sont rapides.

    En fait, les procédures sont rapides dans tous les cas, et le commit aussi.
    Seulement le commit veut dire: fin de la transaction, les autres peuvent voir mes modifications. Et celà sert à rendre les transactions atomiques: soit on voit toutes les modifs, soit aucunes, mais pas la moitié.

    Pour faire une analogie: j'ai déjà écrit 15 lignes et tu ne les vois pas encore, parce que je n'ai pas encore cliqué sur 'envoyer la réponse'. Ça ne veut pas dire que j'écris lentement...

    Cordialement,
    Franck.

    P.S: ça y est, j'ai relu ma réponse, je clique sur 'envoyer' et tu la voit toute entière. Si tu l'avais vu partiellement, cela n'avait aucun intérêt. C'est ça l'atomicité d'une transaction.

Discussions similaires

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

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