problème sur une procédure
:salut:
J'utilise pour traduire mon site web un dictionnaire stocké actuellement sur une table dont voici la structure :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
--
-- Structure de la table `dico`
--
CREATE TABLE `dico` (
`id` int(10) unsigned NOT NULL auto_increment,
`IDPage` varchar(32) NOT NULL default '',
`FR` text NOT NULL,
`EN` text NOT NULL,
`DE` text NOT NULL,
`SP` text NOT NULL,
`IT` text NOT NULL,
PRIMARY KEY (`id`),
KEY `IDPage` (`IDPage`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 ; |
Le champs IDPage désigne la page web où se trouve le mot du dico. Sa présence dans la table dico pose un problème car il y a maintenant plus de 3000 mots dont beaucoup de doublons.
Pour y remédier j'ai créé 2 nouvelles tables et une procédure pour les remplir correctement.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
--
-- Structure de la table `page`
--
CREATE TABLE `page` (
`id_page` varchar(32) collate latin1_bin NOT NULL,
`adresse` varchar(64) collate latin1_bin default NULL,
`nom` varchar(32) collate latin1_bin default NULL,
PRIMARY KEY (`id_page`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_bin;
--
-- Structure de la table `relation_dico_page`
--
CREATE TABLE `relation_dico_page` (
`id_dico` int(10) NOT NULL,
`id_page` varchar(32) collate latin1_bin NOT NULL,
PRIMARY KEY (`id_dico`,`id_page`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_bin; |
Voici la procédure telle qu'elle est écrite dans MySQL Admin :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
CREATE DEFINER=`root`@`localhost` PROCEDURE `insert_id_page`()
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE idpage VARCHAR(32);
DECLARE iddico INT(10);
DECLARE curseur CURSOR FOR SELECT `id`,`IDPage` FROM `dico` ;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
DECLARE CONTINUE HANDLER FOR SQLSTATE '23000' SET done = 0;
OPEN curseur;
REPEAT
FETCH curseur INTO iddico, idpage;
IF ! done THEN
INSERT INTO `page` (`id_page` ,`adresse` ,`nom`)
VALUES (idpage, '',idpage);
INSERT INTO `relation_dico_page` (`id_dico` ,`id_page`)
VALUES (`iddico`,`idpage`);
END IF;
UNTIL done END REPEAT;
CLOSE curseur;
END |
Mon problème : la procédure n'affecte aucune ligne, les insertions ne marchent pas et il n'y a pas d'erreurs dans le log de mysql.
Code:
1 2 3
|
mysql> CALL insert_id_page;
Query OK, 0 rows affected (0.09 sec) |
:merci: d'avance pour vos réponses
P.S. C'est la première fois que je fait une procédure sous MySQL :oops: alors s'il vous plais ne soyez pas trop méchants si la solution est simple et évidente.