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 :

Problème avec un déclencheur


Sujet :

PL/SQL Oracle

  1. #1
    Membre habitué
    Homme Profil pro
    BI Expert
    Inscrit en
    Décembre 2005
    Messages
    181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : BI Expert

    Informations forums :
    Inscription : Décembre 2005
    Messages : 181
    Points : 139
    Points
    139
    Par défaut Problème avec un déclencheur
    Bonjours,
    je pense que mon probléme est assez simple,
    j'ai deux tables T1,T2 identiques, T1 est liée à une interface utilisateur, et T2 n'as aucune relation avec acune table, ce que je veux fair c'est une simulation d'import de données instantané, c'est à dire une fois l'utilisateur insert ou mis à jour la table T1, la table T2 doit être mise à jour aussi à partir de T1, j'ai pensé à crée un déclancheur, simple de type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    CREATE OR REPLACE TRIGGER Tf2 AFTER INSERT or update ON T1
    BEGIN 
        DELETE FROM T2;   
    insert into T2 (select utl_raw.cast_to_varchar2(c1);utl_raw.cast_to_varchar2(c2) from T1);
    END ;
    lors d'une insertion dans la table T1, j'ai la fameuse erreur suivante:
    ORA-04091: table T1 is mutating, trigger/function may not see it

    ensuite j'ai crée une procédure pragma, histoire de résoudre cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Create or replace procedure ifa Is
    pragma AUTONOMOUS_TRANSACTION;
    BEGIN
          delete from famille2;
          insert into famille2 (SELECT utl_raw.cast_to_varchar2(famille),utl_raw.cast_to_varchar2(libelle) from famille) ;
    END;
    et j'ai refais le trigger:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    create or replace trigger tf1 after insert or update on T1 for each row 
     begin
     ifa;
     end;
    cette fois j'ai l'erreur suivante:

    ORA-06519: transaction autonome active détectée et annulée


    et là je poste ma question

    si quelqu'un svp veut m'orienter sur ce que je dois faire afin de palier à cela

    Merci

  2. #2
    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
    ORA-06519 active autonomous transaction detected and rolled back

    Cause: Before returning from an autonomous PL/SQL block, all autonomous transactions started within the block must be completed (either committed or rolled back). If not, the active autonomous transaction is implicitly rolled back and this error is raised.

    Action: Ensure that before returning from an autonomous PL/SQL block, any active autonomous transactions are explicitly committed or rolled back.

  3. #3
    Membre habitué
    Homme Profil pro
    BI Expert
    Inscrit en
    Décembre 2005
    Messages
    181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : BI Expert

    Informations forums :
    Inscription : Décembre 2005
    Messages : 181
    Points : 139
    Points
    139
    Par défaut
    merci,
    mais quand j'ai validé la transaction, j'ai de nouveau l'erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SQL> insert into famille values('9090','5050');
    insert into famille values('9090','5050')
                *
    ERREUR à la ligne 1 :
    ORA-04091: table AZAD.FAMILLE en mutation, déclencheur/fonction ne peut la voir
    ORA-06512: à "AZAD.TF", ligne 3
    ORA-04088: erreur lors d'exécution du déclencheur 'AZAD.TF'

  4. #4
    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 warning Voir le message
    ...
    j'ai deux tables T1,T2 identiques, T1 est liée à une interface utilisateur, et T2 n'as aucune relation avec acune table, ce que je veux fair c'est une simulation d'import de données instantané, c'est à dire une fois l'utilisateur insert ou mis à jour la table T1, la table T2 doit être mise à jour aussi à partir de T1, j'ai pensé à crée un déclancheur, simple de type
    ...
    Il y a plus simple par rapport à votre besoin
    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
    28
    29
    30
    31
    32
     
    Connected to Oracle9i Enterprise Edition Release 9.2.0.5.0 
    Connected as mni
     
    SQL> 
    SQL> create table famille (
      2    code    varchar2(5) primary key,
      3    valeur  varchar2(10)
      4  )
      5  /
     
    Table created
    SQL> create materialized view famille_mv
      2  refresh on commit as
      3  Select * from famille
      4  /
     
    Materialized view created
    SQL> INSERT INTO famille VALUES('9090','5050')
      2  /
     
    1 row inserted
    SQL> commit
      2  /
     
    Commit complete
    SQL> select * from famille_mv
      2  /
     
    CODE  VALEUR
    ----- ----------
    9090  5050
    Sinon vous pouvez éliminer le problème de la table mutante en utilisant tout simplement les valeurs "new" et/ou "old' disponibles dans le trigger "for each row".

  5. #5
    Membre habitué
    Homme Profil pro
    BI Expert
    Inscrit en
    Décembre 2005
    Messages
    181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : BI Expert

    Informations forums :
    Inscription : Décembre 2005
    Messages : 181
    Points : 139
    Points
    139
    Par défaut
    ouai ca marche pour la materialized VIEW , sauf que je sais pas si je peux importer des données à partir d'une vue matérialisé!!
    car mon but c'est d'importer les données de cette 2eme table depuis SQL server 2000.
    pour les valeurs old et new, expliquez moi plus svp, je sais pas c'est quoi!

    merci

  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 warning Voir le message
    ouai ca marche pour la materialized VIEW , sauf que je sais pas si je peux importer des données à partir d'une vue matérialisé!!
    car mon but c'est d'importer les données de cette 2eme table depuis SQL server 2000.
    pour les valeurs old et new, expliquez moi plus svp, je sais pas c'est quoi!

    merci
    Dans une certaine mésure une vue materialisé est comme une table. Que est-ce que ça signifie "importer ... depuis SQL server" ?
    Pour les triggers voilà un tutoriel.

  7. #7
    Membre habitué
    Homme Profil pro
    BI Expert
    Inscrit en
    Décembre 2005
    Messages
    181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : BI Expert

    Informations forums :
    Inscription : Décembre 2005
    Messages : 181
    Points : 139
    Points
    139
    Par défaut
    Merci pour le tutoriel;

    je planifie des lots dts qui font une importation des données vers SQL Server, et c'est le contenu de la table T2 ou eventuellement la vue matérilisé qui doit être copier vers SQL Server, et pas la table d'origine.

Discussions similaires

  1. [2000] Problème avec un déclencheur et une procédure sur un serveur lié
    Par conquist dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 19/06/2013, 17h06
  2. VC++ Direct3D8, problème avec LPD3DXFONT et LPD3DTEXTURE8
    Par Magus (Dave) dans le forum DirectX
    Réponses: 3
    Dernier message: 03/08/2002, 11h10
  3. Problème avec le type 'Corba::Any_out'
    Par Steven dans le forum CORBA
    Réponses: 2
    Dernier message: 14/07/2002, 18h48
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

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