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

Oracle Discussion :

execute immediate 'alter sequence..' sans commit implicite ?


Sujet :

Oracle

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6
    Points : 3
    Points
    3
    Par défaut execute immediate 'alter sequence..' sans commit implicite ?
    Bonjour,

    version oracle 10g
    Je n'ai pas trouvé d'exemple dans les anno du forum.

    Dans un programme assez long je fait beaucoup d'instruction de DML , puis un execute immediate sur un DDL et ensuite d'autres instruction DML

    Problème : mon execute immediate sur une DDL commite implicitement les instructions DML avant l'exécution de celui ci.

    c'est ce que je voudrais éviter puisque je ne veux faire qu'un seul commit situué à la fin de ma procédure.


    Exemple :

    insert into Ma_table(col_test) values ('val_test') ;
    insert into Ma_table(col_test) values ('val_test2') ;
    ....
    execute immediate 'ALTER sequence Ma_seq increment by 3'; <- commit implicite
    ...
    insert into Ma_table(col_test) values ('val_test3') ;

    je ne veux commiter mes instructions qu'à la fin de la procédure et ne peut pas execute l'instruction execute immediate en fin de programme(je doit faire d'autres insert après cette instruction.)

    Comment faire pour que l'execute immediate ALTER sequence ...'
    ne commite pas les insert fait au préalable ( en vert )?


    Merci de votre aide.

    cordialement

  2. #2
    Membre émérite Avatar de nuke_y
    Profil pro
    Indépendant en analyse de données
    Inscrit en
    Mai 2004
    Messages
    2 076
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant en analyse de données

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 076
    Points : 2 370
    Points
    2 370
    Par défaut
    Ne peux-tu pas réaliser l'incrémentation de la séquence avant les ordres DML d'insertion ?

  3. #3
    Membre confirmé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    487
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 487
    Points : 455
    Points
    455
    Par défaut
    Bonjour,

    Ton ordre est un ddl, donc implique obligatoirement un execute immediate.
    Donc ce que tu veux faire est strictement impossible dans la même session.
    Il faudrai donc pouvoir le faire indépendément ailleurs

    Une idéee à tester:
    Tu encapsules ton execute immediate dans une procedure autonome (pragma autonomous_transaction).
    Mais sans aucune garantie que cela marche!

  4. #4
    Membre expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Points : 3 199
    Points
    3 199
    Par défaut
    on ne peut pas.
    les opérations sur le dictionnaire (DDL) ou sur les privilèges (DCL) committent implicitement les transactions en cours.

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6
    Points : 3
    Points
    3
    Par défaut to Leo Anderson
    et si j'utilise la technique d' Aline "pragma autonomous.." cela peut marcher?

    Merci

  6. #6
    Membre expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Points : 3 199
    Points
    3 199
    Par défaut
    Citation Envoyé par aline
    Une idéee à tester
    Pourquoi devrions-nous faire le test à votre place ?

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    avec PRAGMA AUTONOMOUS_TRANSACTION dans une sous-fonction ça marche !

    Merci à tous:

    Détail:

    ------sous fonction avec pragma---
    function alter_sequ(pas_temporaire number, pas_reel number) return number is

    PRAGMA AUTONOMOUS_TRANSACTION; --pour ne pas commiter les DML précedant l'execute immediate DDL
    new_val_actu number;

    begin

    execute immediate 'alter sequence SEQ_FIC_SAP increment by '||pas_temporaire||' nocache';

    select SEQ_FIC_SAP.nextval into new_val_actu from dual;
    execute immediate 'alter sequence SEQ_FIC_SAP increment by '||pas_reel||' nocache';

    return(new_val_actu);

    exception
    when others then
    rollback;
    raise;
    end;

  8. #8
    Membre expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Points : 3 199
    Points
    3 199
    Par défaut
    merci de penser aux balises code et quote !

  9. #9
    Membre émérite Avatar de nuke_y
    Profil pro
    Indépendant en analyse de données
    Inscrit en
    Mai 2004
    Messages
    2 076
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant en analyse de données

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 076
    Points : 2 370
    Points
    2 370
    Par défaut
    Seul problème que je vois : que se passe-t-il si quelqu'un appelle SEQ_FIC_SAP.nextval alors que le pas est encore de 3...

  10. #10
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    En faite SEQ_FIC_SAP n'est appellé que par le programme que je développe donc pas de soucis.

  11. #11
    Membre émérite Avatar de nuke_y
    Profil pro
    Indépendant en analyse de données
    Inscrit en
    Mai 2004
    Messages
    2 076
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant en analyse de données

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 076
    Points : 2 370
    Points
    2 370
    Par défaut
    Bah oui que je suis bête, le problème existait déjà auparavant de toutes façons donc tu y avais forcément pensé

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 26/09/2014, 12h00
  2. EXECUTE IMMEDIATE commit
    Par zdig10 dans le forum PL/SQL
    Réponses: 7
    Dernier message: 11/04/2010, 16h56
  3. Différences execute immediate et commit
    Par pegase06 dans le forum SQL
    Réponses: 11
    Dernier message: 12/02/2007, 15h57
  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