Précédent   Forum des professionnels en informatique > Bases de données > Oracle > PL/SQL
PL/SQL Forum d'entraide sur le PL/SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 22/07/2011, 14h58   #1
Invité régulier
 
Homme
Développeur informatique
Inscription : juin 2011
Messages : 10
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2011
Messages : 10
Points : 5
Points : 5
Par défaut Trigger ON DELETE

Bonjour,
J'ai une table (gestionnaire) qui est référencée dans deux autres tables, j'ai écris un trigger qui, lorsque je supprime une ligne de la table gestionnaire, je met à jour les deux autres table.
Problème : lorsque je fais un delete sur la table gestionnaire, j'ai cette erreur:
Citation:
ORA-04091: la table GESTIONNAIRE est en mutation ; le déclencheur ou la fonction ne peut la voir
ORA-06512: à "T_DELETE_GEST", ligne 5
ORA-04088: erreur lors d'exécution du déclencheur 'T_DELETE_GEST'
table gestionnaire(
id number, --primary key
code varachar2
)
table utilisateurs(
id number
--some fields
id_gestionaire foreign key references gestionnaire (id)
)

table sku(
id number
--some fields
id_gestionaire foreign key references gestionnaire (id)
)
Le code du Trigger :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
CREATE OR REPLACE TRIGGER t_delete_gest
BEFORE DELETE ON gestionnaire
FOR EACH ROW
DECLARE
    id_gestAdmin NUMBER;
BEGIN
    -- Select id gest for Admin
    SELECT id INTO id_gestAdmin
    FROM gestionnaire
    WHERE code = '*';
    -- Update SKU's of gest to Admin's
    UPDATE sku
    SET id_gestionnaire = id_gestAdmin
    WHERE id_gestionnaire = :OLD.id;
 
    UPDATE utilisateurs
    SET id_gestionnaire = id_gestAdmin
    WHERE id_gestionnaire = :OLD.id;
 
END;
cpu64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/07/2011, 15h00   #2
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212






A quoi sert ce SELECT :

Code :
1
2
3
4
5
 
-- Select id gest for Admin
SELECT id INTO id_gestAdmin
FROM gestionnaire
WHERE code = '*';
PS : tu vois comme c'est plus lisible avec les balises CODE
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/07/2011, 15h12   #3
Invité régulier
 
Homme
Développeur informatique
Inscription : juin 2011
Messages : 10
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2011
Messages : 10
Points : 5
Points : 5
le select sert à récupérer un ID d'un autre gestionnaire (règle de gestion)
cpu64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/07/2011, 15h40   #4
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
Fais une recherche dans le forum, on a maintes fois expliquer les causes de cette erreur
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/07/2011, 11h23   #5
Invité régulier
 
Homme
Développeur informatique
Inscription : juin 2011
Messages : 10
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2011
Messages : 10
Points : 5
Points : 5
Bonjour,
J'ai vraiment chercher à trouver une réponse dans le forum ou ailleurs, mais sans succès.
j'ai essayer avec deux code différent:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
CREATE OR REPLACE TRIGGER AGIDIS.t_delete_gest
BEFORE DELETE ON AGIDIS.PNP_GESTIONNAIRE FOR EACH ROW
DECLARE
    PRAGMA AUTONOMOUS_TRANSACTION;
    id_gestAdmin NUMBER;
BEGIN
    -- Select id gest for Admin
    SELECT id INTO id_gestAdmin
    FROM pnp_gestionnaire
    WHERE code = '*';
    -- Update SKU's of gest to Admin's
    UPDATE pnp_sku
    SET id_gestionnaire = id_gestAdmin
    WHERE id_gestionnaire = :OLD.id;
 
    UPDATE pnp_utilisateurs
    SET id_gestionnaire = id_gestAdmin
    WHERE id_gestionnaire = :OLD.id;
END;
 
ORA-06519: transaction autonome active détectée et annulée
ORA-06512: à "AGIDIS.T_DELETE_GEST", ligne 17
ORA-04088: erreur lors d'exécution du déclencheur 'AGIDIS.T_DELETE_GEST'
ce code ne compile pas
ora-04071 missing before after or instead of keyword

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
CREATE OR REPLACE TRIGGER t_delete_gest
FOR DELETE ON pnp_gestionnaire
COMPOUND TRIGGER
    -- Declarartion
    id_gestAdmin PLS_INTEGER ;
BEFORE STATEMENT IS
BEGIN
    -- Select id gest for Admin
    SELECT id INTO id_gestAdmin
    FROM pnp_gestionnaire
    WHERE code = '*';
END BEFORE STATEMENT;
BEFORE EACH ROW IS
BEGIN
    -- Update SKU's of gest to Admin's
    UPDATE pnp_sku
    SET id_gestionnaire = id_gestAdmin
    WHERE id_gestionnaire = :OLD.id;
 
    UPDATE pnp_utilisateurs
    SET id_gestionnaire = id_gestAdmin
    WHERE id_gestionnaire = :OLD.id;
END BEFORE EACH ROW;  
END t_delete_gest;
SVP, si quelqu'un peux me mettre sur la voie, merci.
cpu64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/07/2011, 12h04   #6
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
Il faut lire les régles du forum...
Visiblement une recherche n'a pas été faite puisqu'on a déjà expliqué à maintes reprises qu'on ne peut pas faire de sélection de données sur la table qui porte le trigger
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/07/2011, 12h23   #7
Invité régulier
 
Homme
Développeur informatique
Inscription : juin 2011
Messages : 10
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2011
Messages : 10
Points : 5
Points : 5
Désolé pour la charte, ca ne se reproduira plus.
Pour mon problème, que me conseillez vous.
J'implémente cette base sur Postgres et elle fonctionne bien; maintenant je dois la migré vers Oracle.
Pour revenir au problème:
quand un gestionnaire est supprimé, je dois remplacer son ID dans les tables référencées (SKU, utilisateurs) par l'ID dont le code est '*'
cpu64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/07/2011, 12h47   #8
Membre Expert
 
Avatar de Yanika_bzh
 
Homme Yannick
Ingénieur Etudes & Developpements
Inscription : février 2006
Messages : 1 125
Détails du profil
Informations personnelles :
Nom : Homme Yannick
Localisation : France, Deux Sèvres (Poitou Charente)

Informations professionnelles :
Activité : Ingénieur Etudes & Developpements
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2006
Messages : 1 125
Points : 1 670
Points : 1 670
Vous devriez trouver votre bonheur ici

Bon courage
__________________
Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac)
Yanika_bzh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/07/2011, 14h26   #9
Invité régulier
 
Homme
Développeur informatique
Inscription : juin 2011
Messages : 10
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2011
Messages : 10
Points : 5
Points : 5
Merci, l'article détaille bien la question.
cpu64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h17.


 
 
 
 
Partenaires

Hébergement Web