Problème avec un trigger insert (colonne non reconnue )

Fermé
badryach - 18 févr. 2019 à 17:22
 badryach - 19 févr. 2019 à 00:46
Bonjour,
Donc je souhaite insérer un article dans une table article, si l'auteur a oublier de remplir le résumé, je dois rajouter un résumer à partir du contenu de l'article (150 premier caractères).

Voici la table article:
Code :

CREATE TABLE Article (
id INT UNSIGNED AUTO_INCREMENT,
titre VARCHAR(200) NOT NULL,
resume TEXT,
contenu TEXT NOT NULL,
auteur_id INT UNSIGNED NOT NULL,
date_publication DATETIME NOT NULL,
PRIMARY KEY(id)
);

le trigger qui permet de faire l'ajout automatique du résumer :
Code :



DELIMITER |

create trigger after_insert_article after insert on article for each row
begin
declare _extrait varchar(160) ;
if (resume is null) then
set _extrait=(select COALESCE(resume,substring(contenu, 1,150)) from article where id= new.id);
end if;
update article
set resume =_extrait
where id=new.id;

end |

un test :
Code :

 
INSERT INTO article (titre,resume, contenu, auteur_id, date_publication,nombre_commentaires) VALUES
('confession',null, 'Une fois, une seule, aimable et douce femme,\r\nA mon bras votre bras poli\r\nS''appuya (sur le fond ténébreux de mon âme\r\nCe souvenir n''est point pâli) ;\r\n\r\nIl était tard ; ainsi qu''une médaille neuve\r\nLa pleine lune s''étalait,\r\nEt la solennité de la nuit, comme un fleuve,\r\nSur Paris dormant ruisselait.\r\n\r\nEt le long des maisons, sous les portes cochères,\r\nDes chats passaient furtivement,\r\nL''oreille au guet, ou bien, comme des ombres chères,\r\nNous accompagnaient lentement.\r\n\r\nTout à coup, au milieu de l''intimité libre\r\nÉclose à la pâle clarté,\r\nDe vous, riche et sonore instrument où ne vibre\r\nQue la radieuse gaieté,\r\n\r\nDe vous, claire et joyeuse ainsi qu''une fanfare\r\nDans le matin étincelant,\r\nUne note plaintive, une note bizarre\r\nS''échappa, tout en chancelant\r\n\r\nComme une enfant chétive, horrible, sombre, immonde,\r\nDont sa famille rougirait,\r\nEt qu''elle aurait longtemps, pour la cacher au monde,\r\nDans un caveau mise au secret.\r\n\r\nPauvre ange, elle chantait, votre note criarde :\r\n" Que rien ici-bas n''est certain,\r\nEt que toujours, avec quelque soin qu''il se farde,\r\nSe trahit l''égoïsme humain ;\r\n\r\nQue c''est un dur métier que d''être belle femme,\r\nEt que c''est le travail banal\r\nDe la danseuse folle et froide qui se pâme\r\nDans un sourire machinal ;\r\n\r\nQue bâtir sur les coeurs est une chose sotte ;\r\nQue tout craque, amour et beauté,\r\nJusqu''à ce que l''Oubli les jette dans sa hotte\r\nPour les rendre à l''Éternité ! "\r\n\r\nJ''ai souvent évoqué cette lune enchantée,\r\nCe silence et cette langueur,\r\nEt cette confidence horrible chuchotée\r\nAu confessionnal du coeur.',1,'2014-10-20 14:43:07',null);

mais j'ai le message d'erreur suivant :
Error Code: 1054. Unknown column 'resume' in 'field list'
A voir également:

3 réponses

jordane45 Messages postés 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024 4 717
18 févr. 2019 à 19:49
Bonjour,

Resume fait parti des mots clés réservé de mysql.
Il faut éviter de nommer un champ de cette manière
https://dev.mysql.com/doc/refman/8.0/en/keywords.html#keywords-8-0-detailed-R

Ou alors... l'encapsuler par des backquotes
`resume`

0
Salut,
effectivement je savais pas que c’était un nom réservé mais même en changeons le nom par un autre j'ai toujours le même message mais avec le nouveau nom
0
J'ai résolu moi meme le problème après plusieurs heure lol.Je laisse la solution au cas ou quelqu'un on a besoin après :)

la première des choses le nom de la colonne resume est un nom réservé sur mysql j'ai du le changè par extrait.
deuxièmement je me trompé sur la définition du trigger je devais utiliser un trigger avant l'insertion pour modifier la case avant voila la solution :
DELIMITER |
create trigger before_insert_article before insert on article for each row
begin

if (new.extrait is null) then
set new.extrait =(COALESCE(new.extrait,substring(new.contenu, 1,150)));

end if;
end |
0