Bonjour,
J'utilise pour la première fois les triggers etca ne tourne pas complètement comme je le voudrais.
Ce que je souhaite faire :
Dans la base test j'ai la table amis contenant les champs id, nom, prenom, status
Dans la base test2 j'ai aussi une table amis contenant les champs nom, prenom
j'ai besoin que quand une insertion à lieu dans la table test.amis elle soit aussitôt insérée dans
la table test2.amis.
Pour ne prendre que les dernières lignes je selectionne que celles dont status = 0
Insertion dans la table test2.amis
Update de status à 1 dans test.amis
Seul fonctionne l'insertion dans test2.amis mais pas l'update et l'erreur suivante survient :
ERROR 1442 (HY000): Can't update table 'amis' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
Voici le trigger :
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
17
18
19
20
21 CREATE TRIGGER ajout_amis AFTER INSERT ON test.amis FOR EACH ROW BEGIN DECLARE v_id INT; DECLARE v_nom VARCHAR(20); DECLARE v_prenom VARCHAR(20); DECLARE v_status CHAR(1); DECLARE curseur CURSOR FOR SELECT id, nom, prenom, status FROM test.amis WHERE status = '0'; DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_status = 1; OPEN curseur; boucle_amis: LOOP FETCH curseur INTO v_id, v_nom, v_prenom, v_status; IF (v_status = 1) THEN LEAVE boucle_amis; END IF; UPDATE test.amis SET status = '1' WHERE id = v_id; INSERT INTO test2.amis (id, nom, prenom) VALUES (v_id, v_nom, v_prenom); END LOOP; END;
Partager