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 :

Pragma autonomous transaction


Sujet :

SQL Oracle

  1. #1
    Membre régulier
    Inscrit en
    Juin 2007
    Messages
    328
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 328
    Points : 115
    Points
    115
    Par défaut Pragma autonomous transaction
    Bonsoir,
    afin de detourner la fameuse j'ai crée une fonction qui me retoune le resultat d'un select sur la table "en mutation", et bien sur avec "pragma autonomous transaction" à l'interieur de cette fonction.
    je n'ai plus d'erreur , sauf que la fonction ne s'execute pas, mais lorsque je mets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pragma autonomous transaction
    en commentaire , la fonction est exceutée mais bien sur l'erreur remonte en face
    ma question est la suivante : pourquoi , au niveau de la fonction, le code n'est pas executé lorsque
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pragma autonomous transaction
    y est ??

  2. #2
    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
    Attends... où j'ai bien pu mettre ma boule de crystal... rhaaaa et le jeu de tarot...

    Désolé, j'ai pas... faudra peut-être que tu nous donnes le code... enfin, sans vouloir te déranger hein

  3. #3
    Membre régulier
    Inscrit en
    Juin 2007
    Messages
    328
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 328
    Points : 115
    Points
    115
    Par défaut

    desolée LOL
    voila ma fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    CREATE OR REPLACE FUNCTION fct_return_idp(id_p VARCHAR2)
    RETURN varchar2 IS
    idp
    varchar(20);
    PRAGMA AUTONOMOUS_TRANSACTION;
    BEGIN
    select id_personne into idp
    from porteur where Porteur.id_porteur = id_p;
     
    RETURN id_p;
    Exception
    When
    NO_DATA_FOUND Then RETURN NULL;
    END;
    et le trigger :
    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
    26
    27
    CREATE OR REPLACE TRIGGER TR_RemplirSMI_FromConso after UPDATE OR INSERT ON CONSOLIDATION FOR EACH ROW 
    DECLARE  
    tag VARCHAR(64);
     
    codelogique VARCHAR(30);
     
    existe number;
     
    BEGIN 
     
    select champ into tag from porteur, supporte where porteur.id_carte=supporte.id_carte and Porteur.id_porteur=:new.id_porteur;
     
    codelogique := fct_return_idp(:new.id_porteur);
     
    codelogique := substr(codelogique,0,length(codelogique)-12)||substr(codelogique,-8,8);
     
    select count(tag) into existe from SMI where tag = tag;
    if (:new.consolidation='CN') then 
     if (existe<1) then 
    insert into SMI  (codelogique,tag,exporter) values (codelogique,tag,'0';
     else 
    update SMI set exporter = '0' where tag = tag ;
     
    end if; 
    end if ;
    Exception When NO_DATA_FOUND Then NULL;
     END;
    et l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    la table UNI.PORTEUR est en mutation ;

  4. #4
    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


    Et pourquoi au lieu de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT champ INTO tag FROM porteur, supporte WHERE porteur.id_carte=supporte.id_carte AND Porteur.id_porteur=:new.id_porteur;
     
    codelogique := fct_return_idp(:new.id_porteur);
     
    codelogique := substr(codelogique,0,length(codelogique)-12)||substr(codelogique,-8,8);
    tu ne fais pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT champ,substr(id_personne,0,length(id_personne)-12)||substr(id_personne,-8,8) INTO tag,codelogique  FROM porteur, supporte WHERE porteur.id_carte=supporte.id_carte AND Porteur.id_porteur=:new.id_porteur;


    C'est quoi l'intérêt de la fonction ?

    Sinon, je te conseille de lire la doc de MERGE aussi

  5. #5
    Membre régulier
    Inscrit en
    Juin 2007
    Messages
    328
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 328
    Points : 115
    Points
    115
    Par défaut
    la fct selectionne de la table porteur , cette table est en mutation , donc je crée la fct contenant la pragma

  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
    Le pragma autonomous transaction ne peut pas résoudre le problème de la « table en mutation ». Le problème de la table en mutation est un bug de développement et non pas d’Oracle.

  7. #7
    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 zaineb.z Voir le message
    la fct selectionne de la table porteur
    mais tu l'as déjà dans le trigger la sélection de porteur... t'as lu ma proposition ?

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Février 2006
    Messages
    139
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2006
    Messages : 139
    Points : 152
    Points
    152
    Par défaut
    Bonjour,

    Pour ta question originelle: le pragma autonomous cree une nouvelle session s2. Via cette session s2 tu essaies de lire des enregistrements non committés par s1 donc invisible pour s2. Comme tu as un when no_data_found then null, l'erreur ne se voit pas non plus.

    Concernant le fond du probleme, je ne pense pas que ce soit ce trigger qui pose probleme. Il n'y a pas de modification de la table porteur(ou j'ai mal vu). Le select n'est pas bloquant donc pour moi, il y a un autre accès à la table.

    Cdt

  9. #9
    Membre régulier
    Inscrit en
    Juin 2007
    Messages
    328
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 328
    Points : 115
    Points
    115
    Par défaut
    oui oui bien sur , mais cela ne résout pas mon problème , vu que la table porteur est en mutation ( trigger lancé lors de la modif de la table porteur , effectue des modifs ce qui declenchent le trigger sur lequel je travaille mnt )

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Février 2006
    Messages
    139
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2006
    Messages : 139
    Points : 152
    Points
    152
    Par défaut
    tu peux donner le sequencement des actions?

  11. #11
    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
    si tu t'évertues à ne pas lire les réponses on ne peut rien pour toi

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

Discussions similaires

  1. Deadlock sur autonomous transaction
    Par Pozzo dans le forum PL/SQL
    Réponses: 8
    Dernier message: 05/11/2011, 06h41
  2. AUTONOMOUS TRANSACTION pas si autonome que ça ?
    Par samgratt dans le forum PL/SQL
    Réponses: 4
    Dernier message: 20/10/2009, 10h39
  3. A quoi sert "Pragma autonomous transaction"
    Par Jcpan dans le forum SQL
    Réponses: 3
    Dernier message: 03/09/2008, 21h56
  4. Transaction autonomes pour une appli web en .NET
    Par lex0072 dans le forum Oracle
    Réponses: 11
    Dernier message: 08/07/2005, 15h36
  5. [Transaction autonome][PRIVILEGES]
    Par PpPool dans le forum Administration
    Réponses: 5
    Dernier message: 10/09/2003, 15h17

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