Bonjour à tous,
J’ai actuellement un petit souci pour la mise en place d’un trigger sur une table.
Mon but est que pour chaque INSERT UPDATE sur une table, le champ xml_data soit analysé, et que chaque :
caractère %c3%a9 soit remplacé par é
caractère %c3%a8 soit remplacé par è
…
Lors de mes différentes tentatives, soit j’ai une erreur lors d’un update ou d’un insert liée à ce trigger.
Voici mes tentatives :
delimiter //
CREATE TRIGGER avantUpdateTrigger BEFORE UPDATE
ON events_calendars FOR EACH ROW
BEGIN
UPDATE events_calendars SET xml_data = replace(xml_data , ‘%c3%a9’, ‘é’) WHERE id = NEW.id;
UPDATE events_calendars SET xml_data = replace(xml_data , ‘%c3%a8’, ‘è’) WHERE id = NEW.id;
UPDATE events_calendars SET xml_data = replace(xml_data , ‘%c3%a0’, ‘à’) WHERE id = NEW.id;
UPDATE events_calendars SET xml_data = replace(xml_data , ‘%c3%a7’, ‘ç’) WHERE id = NEW.id;
UPDATE events_calendars SET xml_data = replace(xml_data , ‘%c3%aa’, ‘ê’) WHERE id = NEW.id;
UPDATE events_calendars SET xml_data = replace(xml_data , ‘%c3%b9’, ‘ù’) WHERE id = NEW.id;
END//
CREATE TRIGGER avantInsertTrigger BEFORE INSERT
ON events_calendars FOR EACH ROW
BEGIN
UPDATE events_calendars SET xml_data = replace(xml_data , ‘%c3%a9’, ‘é’) WHERE id = NEW.id;
UPDATE events_calendars SET xml_data = replace(xml_data , ‘%c3%a8’, ‘è’) WHERE id = NEW.id;
UPDATE events_calendars SET xml_data = replace(xml_data , ‘%c3%a0’, ‘à’) WHERE id = NEW.id;
UPDATE events_calendars SET xml_data = replace(xml_data , ‘%c3%a7’, ‘ç’) WHERE id = NEW.id;
UPDATE events_calendars SET xml_data = replace(xml_data , ‘%c3%aa’, ‘ê’) WHERE id = NEW.id;
UPDATE events_calendars SET xml_data = replace(xml_data , ‘%c3%b9’, ‘ù’) WHERE id = NEW.id;
END//
delimiter ;
–> J’obtiens une erreur lors d’un update ou insert sur la table:
Can’t update table ‘events_calendars’ in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
Je n’ai pas plus compris lorsque j’ai cherché sur des forum ou sur la documentation de MySQL
Je vous remercie d’avance pour votre aide.