Tu procedimiento tiene varios errores:
1. Un CURSOR se declara al inicio de todo proceso e inmediatamente después de declarar todas las variables. No se puede declarar dentro de una función.
2. La cláusula IF EXISTS se usa para la sentencia DROP. No es una sentencia de MySQL por si misma, porque EXISTS no es una función sino una cláusula de otra sentencia.
3. Saber si algo ha dado resultado es simple: si no da resultado, devuelve NULL, por lo que la sentencia sería simplemente:
Código sql:
Ver originalIF (SELECT MAX(indice) FROM mov_com WHERE codpro = variablecodigo) IS NULL THEN
SET indicem = 1;
ELSE
SET indicem = (SELECT MAX(indice) FROM mov_com WHERE codpro = variablecodigo) + 1;
END IF;
Tip final: No uses un CURSOR para tareas tan elementales, consume muchos recursos del microprocesador inutilmente y no son optimizables. Úsalos solamente para tareas en las que realmente debas procesar un conjunto de registros.