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

Administration Oracle Discussion :

Problême trigger PL SQL


Sujet :

Administration Oracle

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Problême trigger PL SQL
    Bonjour

    Je vous explique donc mon problème ! J’ai deux tables « groupe » (de musique) et « album » et je voudrai créer un trigger qui me supprime tous les albums d’un groupe après suppression de celui-ci.

    Mais le problème, comment puis-je garder en mémoire l’identifiant du groupe que j’ai supprimé pour ensuite le réutiliser dans la condition WHERE de mon trigger ? C’est grâce à cet identifiant que je vais pouvoir supprimer les albums de l’ancien groupe.

    Merci pour vos réponses

    voila monde code:
    (il ne marche pas )

    Code trig.sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    CREATE OR REPLACE TRIGGER deleteAlbums AFTER DELETE ON groupe
    BEGIN
     
    delete from album where Album.id_groupe=:old.id_groupe;
     
    END;
    /

    Erreur renvoyée


    SQL> @trig
    CREATE OR REPLACE TRIGGER deleteAlbums AFTER DELETE ON groupe
    *
    ERREUR à la ligne 1 :
    ORA-04082: références NEW ou OLD interdites dans déclencheurs niveau table


    ha aussi et si vous pouviez m'aider sur ce petit problême

    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
    CREATE OR REPLACE PROCEDURE groupe_nom (
     
    idg 	IN groupe.id_groupe%type,
    nomg 	IN groupe.nom_groupe%type) IS
     
    BEGIN
     
    UPDATE groupe SET nom_groupe = nomg WHERE id_groupe = idg;
     
    EXCEPTION
    WHEN NO_DATA_FOUND THEN
    INSERT INTO jo VALUES (5);
     
     
    END;
    /
    Il me gère pas les exeptions ! J'ai beau indiquer des valeurs inexistantes ! l'exeption n'est pas tréité !

  2. #2
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Ajoutez : FOR EACH ROW à votre trigger.
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  3. #3
    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
    Une clé étrangère avec un delete cascade ne pourrait pas faire ça à votre place ?
    Il vaut mieux monopoliser son intelligence sur des bêtises que sa bêtise sur des choses intelligentes.

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE OR REPLACE TRIGGER deleteAlbums AFTER DELETE ON groupe FOR EACH ROW 
    BEGIN
     
    delete from album where Album.id_groupe=:old.id_groupe;
     
    END;
    /
    SQL> delete from groupe where id_groupe=14;
    delete from groupe where id_groupe=14
    *
    ERREUR à la ligne 1 :
    ORA-04091: la table SYSTEM.ALBUM est en mutation ; le déclencheur ou la fonction ne peut la voir
    ORA-06512: à "SYSTEM.DELETEALBUMS", ligne 3
    ORA-04088: erreur lors d'exécution du déclencheur 'SYSTEM.DELETEALBUMS'


    j'y avais pensais, mais nan marche toujours pas


    Mais je commence à comprendre pourquoi !

    Une clé étrangère avec un delete cascade ne pourrait pas faire ça à votre place ?
    Oué, j'avais oublié que je l'avais fait lors de la création de mes tables Donc en fait ça le fait sans trigger ! Donc c'est cool
    Et je pense donc que c'est à cause de ça que mon trigger ne marche pas ! Mais pas sur !

    C’est sur que c’est plus intéressant, mais j’essaye de me familiariser avec les trigger !

  5. #5
    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
    Sur ton trigger tu as une erreur de table mutante ou mutating table. Cherche sur le forum pour savoir ce que c'est. Mais je pense qu'effectivement c'est ton delete cascade qui doit se déclencher quand tu delete dans ton trigger.

    Genre tu delete dans groupe -> delete en cascade dans album et simultanément tentative de delete dans album dans ton trigger -> erreur.

    Enfin je pense, ça me semble un peu bizarre quand même.
    Il vaut mieux monopoliser son intelligence sur des bêtises que sa bêtise sur des choses intelligentes.

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    J’ai trouvé mes erreurs je vous les dis au cas ou cela vous intéresse :
    En fait lors de la création de mon trigger il faut que je définisse les variables que je vais utiliser, soit dans cet exemple « id_groupe »

    Donc il faut déjà que je construise mon trigger de cette façon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CREATE OR REPLACE TRIGGER deleteAlbums AFTER DELETE OF
    id_groupe ON groupe FOR EACH ROW
    Seul petit problème, cela ne marche pas si je mets juste delete (avec OF). Le OF marche avec UPDATE ! Donc il faut que je le rajoute (et tant qu’on y est, je rajoute le INSERT) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CREATE OR REPLACE TRIGGER deleteAlbums AFTER DELETE OR 
    UPDATE OR INSERT OF id_groupe ON groupe FOR EACH ROW

    Après faut que je rajoute les closes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    IF DELETING THE
    …
    END IF ;
     
    IF UPDATING THENEND IF ;

    Et là, ça marchera ! Ensuite j’ai repensé mon code, car de toute façon ce que je veux faire est impossible, car comme vous l'avez dit le « delete en cascade » m'en empeche.

    Voila et encore merci pour vos réponses !

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

Discussions similaires

  1. Problème Trigger SQL Server
    Par RodEpsi dans le forum Développement
    Réponses: 6
    Dernier message: 25/05/2006, 15h03
  2. Problème de date avec un trigger PL/SQL
    Par fluec-wa dans le forum PL/SQL
    Réponses: 6
    Dernier message: 18/01/2006, 14h56
  3. Problème de requète SQL dans un Requery
    Par Keraccess dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 22/10/2004, 14h58
  4. Problème Access to Sql Server
    Par vuldos dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 26/08/2004, 15h56
  5. Réponses: 3
    Dernier message: 18/11/2002, 16h36

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