Faire un trigger avec une sous-requête
cixion
-
cixion -
cixion -
Bonjour,
Je me permets de faire appel à vous parce que là je suis sans solution :
je dispose de ces trois tables pour modéliser des rencontre de tennis entre deux joueurs de même club ou de clubs difféfrents :
La table club(num_club,nom, adresse,telephone)
La table joueur(num_license,#num_club,nom,prenom,adresse,sexe,telephone)
et la table match(num_match,#num_license1,#num_license1,#num_license2,#num_club1,#num_club2,date_match)
Voici ce que je voudrais faire :
Insérer des valeurs aléatoires de joueurs et de clubs dans la table match mais que ce soit cohérent avec la table adhérent par exemple si le joueur a fait partie du club C1 alors dans match , j'aurai cet adherent avec le bon club auquel il est affilié.
Cependant comme j'insère des valeurs aléatoires pour des insertions multiples pour modéliser les matchs sur une saison , les joueurs ne sont plus dans les bons clubs.
J'ai donc décidé de faire un trigger qui corrigerait cela en updatant le num_club avec le num_club associé au joueur dans la table joueur avec une sous-requête :
CREATE OR REPLACE TRIGGER majclub
AFTER INSERT on Match for each row
begin
UPDATE temp_match set num_club1= (select num_club from adherent where num_license= :old.num_license1)
where num_match = :old.num_match;
end;
/
Mais j'ai une erreur ORA-04091: table ma_table is mutating, trigger/function may not see it
dès que je veux insérer des matchs à cause du trigger si vous avez une solution à mon problème je suis toute ouïe
Je me permets de faire appel à vous parce que là je suis sans solution :
je dispose de ces trois tables pour modéliser des rencontre de tennis entre deux joueurs de même club ou de clubs difféfrents :
La table club(num_club,nom, adresse,telephone)
La table joueur(num_license,#num_club,nom,prenom,adresse,sexe,telephone)
et la table match(num_match,#num_license1,#num_license1,#num_license2,#num_club1,#num_club2,date_match)
Voici ce que je voudrais faire :
Insérer des valeurs aléatoires de joueurs et de clubs dans la table match mais que ce soit cohérent avec la table adhérent par exemple si le joueur a fait partie du club C1 alors dans match , j'aurai cet adherent avec le bon club auquel il est affilié.
Cependant comme j'insère des valeurs aléatoires pour des insertions multiples pour modéliser les matchs sur une saison , les joueurs ne sont plus dans les bons clubs.
J'ai donc décidé de faire un trigger qui corrigerait cela en updatant le num_club avec le num_club associé au joueur dans la table joueur avec une sous-requête :
CREATE OR REPLACE TRIGGER majclub
AFTER INSERT on Match for each row
begin
UPDATE temp_match set num_club1= (select num_club from adherent where num_license= :old.num_license1)
where num_match = :old.num_match;
end;
/
Mais j'ai une erreur ORA-04091: table ma_table is mutating, trigger/function may not see it
dès que je veux insérer des matchs à cause du trigger si vous avez une solution à mon problème je suis toute ouïe
A voir également:
- Faire un trigger avec une sous-requête
- Assistant trigger - Guide
- Erreur de requete facebook - Forum Facebook
- L'opérateur ou l'administrateur a refusé la requête ✓ - Forum Windows
- Quelle requête écrire pour demander au moteur de recherche de présenter de préférence les pages web traitant de tennis mais pas de tennis de table ✓ - Forum Java
- Roxane cherche des informations pour écrire un rapport sur la diversité. avec un moteur de recherche généraliste, elle souhaite limiter les résultats de sa recherche aux pages de l’organisation internationale du travail. quelle requête doit-elle taper dans le champ de recherche ? - Forum Réseaux sociaux
1 réponse
Salut,
L'erreur signifie que tu demandes au trigger de mettre à jour une table qui est en cours de mise à jour ou qui même a déclenché le trigger. En gros tu boucles.
C'est donc une mauvaise conception.
Tu n'as d'ailleurs pas mentionné la table temp_match ?
Plutôt d'insérer des valeurs aléatoires, tu devrais revoir ton programme pour insérer les infos du club issus de la table joueur, pas essayer de corriger après coup une valeur mise au pif.
cdlt
L'erreur signifie que tu demandes au trigger de mettre à jour une table qui est en cours de mise à jour ou qui même a déclenché le trigger. En gros tu boucles.
C'est donc une mauvaise conception.
Tu n'as d'ailleurs pas mentionné la table temp_match ?
Plutôt d'insérer des valeurs aléatoires, tu devrais revoir ton programme pour insérer les infos du club issus de la table joueur, pas essayer de corriger après coup une valeur mise au pif.
cdlt
j'ai oublié de modifier c'est la table match que j'update dans le trigger mais bon ca va conduire au même problème.
j'ai déjà essayé en faisant la sous requête dans le insert pour le champ num_club1 comme ci-dessous :
INSERT INTO match(num_match,num_license1,num_license2,num_club1,num_club2,date_match)
(SELECT '',dbms_random.value(1,60),dbms_random.value(1,60),select num_club from adherent where num_license=''),dbms_random.value(1,15),TO_DATE(TRUNC(DBMS_RANDOM.VALUE(2455928,2455928+364)),'J')
FROM DUAL
CONNECT BY LEVEL <= 50);
Le problème , c'est que je sais pas quoi mettre après le num_license pour qu'il le fasse pour chaque ligne en modifiant le num_club
la sous-requête elle serait du style : select num_club from joueur where num_license=(select num_license1 from match where num_license=??? et je sais pas quoi mettre pour le faire pour chaque ligne de match ou si t'as une autre idée merci de m'aider