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 :

Pb avec Trigger before delete : ORA-04091


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2
    Par défaut Pb avec Trigger before delete : ORA-04091
    Bonjour à tous,

    Ma problématique est la suivante : le schéma Oracle sur lequel je travaille comporte un nombre important de tables (+ de 2000) et j'ai donc un nombre de contraintes référentielles (clés étrangères ) en rapport.

    Ces clés étrangères ne sont pas toutes "CASCADE". Or j'ai besoin parfois de pouvoir purger certains records (et donc également ceux le référençant).

    Pour cela, j'ai tout d'abord coder un package PL/SQL de purge "générique" (permettant de supprimer tout record de toute table en utilisant les ROWID).
    Ce package s'appuie sur le dictionnaire Oracle et recense la cartographie des tables à impacter pour faire un delete pour chacune. Cela fonctionne parfaitement mais est très très long...

    Aussi, j'ai penser coder un script PL/SQL qui créée un TRIGGER BEFORE DELETE pour chaque table référencée par au moins une clé étrangère non cascade. Au sein de chacun de ces TRIGGERS, je ne supprime que les records référençant le record à supprimer via une clé étrangère NON CASCADE.

    Voici un exemple de trigger généré :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    create or replace trigger "T_ABSE_SAIS_D"
     before delete on GRH$VISA.ABSE_SAIS for each row
    begin
        if VIS$SUPPRESSION.VB_SUPP then
            delete from GRH$VISA.ACCI_DECL a where a.ABSS_ABSS_ID = :old.ABSS_ID;
            delete from GRH$VISA.AGEN_HISTO_IJ a where a.ABSS_ABSS_ID = :old.ABSS_ID;
        end if;
    end;
    Mon problème est que lorsque je purge un record, ça coince dès que je traite une table référencée par une clé étrangère DELETE CASCADE : Erreur ORA-04091...

    Quelqu'un a-t-il déjà eu à traiter une telle problèmatique ?
    Avez vous un (ou des) idée(s) ?

    Merci par avance.

    Nicolas

  2. #2
    Candidat au Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2
    Par défaut
    J'ai trouvé l'origine de mon problème.

    En fait, lorsque je supprime un record d'une table, je peux avoir à supprimer plusieurs records d'une autre table la référençant mais s'appuyant sur des contraintes référentielles différentes.

    Ce qui implique deux accès différents pour recenser les records à supprimer et qui génère cette erreur ORA-04091...

    En clair, ma problématique ne peut être résolu via les TRIGGERS...

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

Discussions similaires

  1. Fatal Error : Trigger Before Delete
    Par BLJ.CHAUVIN dans le forum SQL Procédural
    Réponses: 13
    Dernier message: 08/09/2011, 10h39
  2. Pbm trigger before Delete
    Par akli_agha dans le forum Firebird
    Réponses: 8
    Dernier message: 13/03/2010, 16h09
  3. Problème avec trigger for delete
    Par tornade69 dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 07/10/2008, 09h37
  4. Erreurs sur un trigger BEFORE DELETE
    Par Daikyo dans le forum PL/SQL
    Réponses: 1
    Dernier message: 13/06/2008, 02h13
  5. souci avec trigger -- before en ms server?
    Par bibi_forever dans le forum Développement
    Réponses: 3
    Dernier message: 22/05/2007, 11h10

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