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 :

Utiliser un alter table dans un trigger


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre extrêmement actif
    Avatar de randriano
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 221
    Par défaut Utiliser un alter table dans un trigger
    Bonjour,

    J'utilise un trigger AFTER INSERT (non pas ON EACH ROW) sur une table: il utilise alors un ALTER TABLE en fonction des données insérées!!
    Le problème c'est que j'obtiens:
    ORA-04092: cannot COMMIT in a trigger

    Donc, j'ai décidé d'utiliser la directive pragma autonomous_transaction que j'ai découvert sur le net
    Maintenant le trigger et l'ALTER TABLE fonction au 1er appel mais aux autres INSERT sur la table, il y a cette erreur:
    ORA-06519: active autonomous transaction detected and rolled back
    ORA-06512: at "RANDRIANO.A_I_Mytable", line 239
    ORA-04088: error during execution of trigger 'RANDRIANO.A_I_Mytable'


    Finalement, le pragma autonomous_transaction n'était donc pas la solution ou quoi??
    randriano.dvp.com
    Développeur. Product Owner [Agile]. Sites web, mobile apps, système d'information (SI).

  2. #2
    Membre extrêmement actif
    Avatar de randriano
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 221
    Par défaut
    Bon, j'ai oublié de mettre commit à la fin!!
    Mais en mettant commit, l'ALTER TABLE s'exécute bien mais les procédures et triggers liés de près ou de loin avec ce trigger sont invalides (avec le point rouge) mais une recompilation d'eux les rend immédiatement valide après; pour mon cas, il semble que c'est la moitié d'eux même

    REM: La table que je tente de modifier avec alter table est une table table mais pas celle qui a déclenché le trigger
    randriano.dvp.com
    Développeur. Product Owner [Agile]. Sites web, mobile apps, système d'information (SI).

  3. #3
    Membre éclairé Avatar de rvfranck
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    746
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 746
    Par défaut
    Alors, le problème est il resolu?

  4. #4
    Membre extrêmement actif
    Avatar de randriano
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 221
    Par défaut
    Non, ça ne l'est pas encore mais je cherche toujours faute de réponses sur le forum
    Le problème c'est le fait que mes procédures sont devenues invalides avec sans erreur (point rouge sous OEM) => Comment faire pour recompiler tout ?

    Voici un résumé de mes tentatives:
    1) A_I_MYTABLE (the instruction trigger)
    ********************************
    - without pragma + commit: 1488 records in MYTABLE and procedures ok
    - with pragma + commit: 1488 records, new fields ADDED but procedures invalid

    1) A_I_ROW_MYTABLE (the line trigger) AND A_I_MYTABLE supprimé
    **************************************************
    - without pragma + commit: 1445 records in MYTABLE and subprograms ok
    - with pragma + commit: 1488 records, 1488 records, new fields ADDED but procedures invalid

    Normalement, 1488 enregistrements! (en fait, il y a un code DELETE dans le trigger selon le cas et normalement, ce n'est jamais satisfait)

    Est-ce que le truc du pragma+commit est le bon ?
    randriano.dvp.com
    Développeur. Product Owner [Agile]. Sites web, mobile apps, système d'information (SI).

  5. #5
    Membre éclairé Avatar de rvfranck
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    746
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 746
    Par défaut
    Citation Envoyé par randriano Voir le message
    Est-ce que le truc du pragma+commit est le bon ?
    Je pense que oui, si on veut utiliser une DDL dans un trigger DML il faut effectivement utiliser la clause "PRAGMA AUTONOMOUS TRANSACTION" et faire le "COMMIT" dans le trigger.

    Et si tu recompilais le trigger lui même!!!

  6. #6
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Bizarre cette histoire du COMMIT à rajouter :

    1/ Jamais de commit dans un trigger
    2/ Une opération DDL fait un commit automatiquement

  7. #7
    Membre extrêmement actif
    Avatar de randriano
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 221
    Par défaut
    J'ai enlevé le commit en mettant l'ALTER TABLE dans une procédure séparée qui sera appelée par le trigger

    Et si tu recompilais le trigger lui même!!!
    Mais le trigger est ok !!! Comment recompiler les autres?
    randriano.dvp.com
    Développeur. Product Owner [Agile]. Sites web, mobile apps, système d'information (SI).

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

Discussions similaires

  1. ALTER TABLE dans un package
    Par guntzerp dans le forum Oracle
    Réponses: 2
    Dernier message: 29/06/2006, 15h40
  2. Réponses: 2
    Dernier message: 03/03/2006, 13h41
  3. Alter table dans procédure stockée
    Par mehitabelle dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 30/11/2005, 16h14
  4. Réponses: 4
    Dernier message: 30/09/2005, 13h14
  5. Problème d'alter table dans une procédure stockée
    Par Oluha dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 16/03/2005, 09h19

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