MYSQL ne Peut pas mettre à jour le tableau en fonction stockée/déclencheur car il est déjà utilisé par une déclaration qui a invoqué cette fonction stockée/trigger
Je reçois cette erreur:
"Impossible de mettre à jour la table "wp_posts' en fonction stockée/déclencheur car il est déjà utilisé par une déclaration qui a invoqué cette fonction stockée/trigger"
Lors de Thème insère un enregistrement dans la WP_posts
table, j'aimerais le déclencheur afin de déterminer si le nouvel enregistrement inséré a post_title (column) = 'scheduled_subscription_end_of_prepaid_term' (field data)
. Si c'est le cas, je voudrais le déclencheur pour en extraire une ID
de new.post_content
(colonne/données dans la nouvelle ligne insérée).
Une fois que l'ID est extrait, j'aimerais mettre à jour l'ID. L'ID est différent de l'ID de la nouvelle ligne insérée.
Quelqu'un peut-il me dire ce que je fais mal?
delimiter //
create TRIGGER DB.Cancel
before INSERT ON DB.wp_posts FOR EACH ROW
BEGIN
DECLARE updateid bigint;
Declare variable longtext;
declare variable2 longtext;
IF NEW.post_title = 'scheduled_subscription_end_of_prepaid_term' then
set updateid := NEW.id;
set variable := RIGHT(new.post_content, LOCATE(":", new.post_content));
set variable2 := LEFT(variable, LOCATE("2052", variable)-2);
update db.wp_posts
set post_status="wc-cancelled"
where id=variable2 and post_status='wc-processing';
end if;
END//
- Le message d'erreur est clair, vous ne pouvez pas mettre à jour la même table où le déclencheur est arriver exécuté.
- Quel est le point de
set updateid := NEW.id;
?
Vous devez vous connecter pour publier un commentaire.
Si vous essayez de modifier la ligne à insérer avant qu'il soit complètement inséré, vous avez seulement besoin de DÉFINIR de NOUVELLES valeurs, de ne pas exécuter une mise à JOUR.
Si vous essayez de mettre à jour un ou plusieurs des lignes différentes dans la même table que le déclencheur, ce qui n'est pas autorisé.
INSERT
s à cette table que vous souhaitez à se comporter de cette manière doit être fait par le biais d'un appel de procédure plutôt que de les séparerINSERT
requêtes.