Porque los cursores se declaran después de todas las variables y los handlers después de todas las declaraciones. No se pueden crear variable luego de declarar un HANDLER.
Nunca.
Código sql:
Ver originalCREATE PROCEDURE `new_proc`()
NOT DETERMINISTIC
SQL SECURITY DEFINER
COMMENT ''
BEGIN
DECLARE DONE INT DEFAULT O;
DECLARE PROVINCIA VARCHAR(5);
DECLARE MUNICIPIO VARCHAR(5);
DECLARE CP VARCHAR(5);
DECLARE C1 CURSOR FOR SELECT C_PROVINCIA, C_MUNICIPIO, C_POSTAL FROM MUNICIPIOS;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
OPEN C1;
REPEAT
FETCH C1 INTO PROVINCIA, MUNICIPIO, CP ;
IF NOT DONE THEN
UPDATE `municipios`
SET C_MUNICIPIO=CONCAT(PROV,MUNI)
WHERE C_PROVINCIA=PROV AND C_POSTAL=CP;
END IF;
UNTIL DONE END REPEAT;
END ;