Ola, consegui fazer o que queria, porem deu um pouco mais de trabalho que o simples sql acima.
Mas se alguem tiver algo melhor e quiser compartilhar, fico feliz em ver.
DELIMITER $$
DROP PROCEDURE IF EXISTS `xxxx`.`SP_PERIODO_MESES` $$
CREATE PROCEDURE `SP_PERIODO_MESES`(
V_ID_SAFRA VARCHAR(255),
V_DS_PERIODO DOUBLE)
BEGIN
DECLARE X INT DEFAULT 0;
DECLARE Y INT DEFAULT 1;
CREATE TEMPORARY TABLE tbl_periodo (
DS_NOME_MES varchar(50)) ENGINE=MEMORY;
IF V_DS_PERIODO = 2 THEN
SET Y = (SELECT PERIOD_DIFF(EXTRACT(YEAR_MONTH FROM DS_PER_CIVIL_FIN), EXTRACT(YEAR_MONTH FROM DS_PER_CIVIL_INI))
FROM tbl_safra WHERE ID_SAFRA = V_ID_SAFRA);
SELECT DS_PER_CIVIL_INI INTO @DATA_INICIAL FROM tbl_safra WHERE ID_SAFRA = V_ID_SAFRA;
ELSE
SET Y = (SELECT PERIOD_DIFF(EXTRACT(YEAR_MONTH FROM DS_PER_SAFRA_FIN), EXTRACT(YEAR_MONTH FROM DS_PER_SAFRA_INI))
FROM tbl_safra WHERE ID_SAFRA = V_ID_SAFRA);
SELECT DS_PER_SAFRA_INI INTO @DATA_INICIAL FROM tbl_safra WHERE ID_SAFRA = V_ID_SAFRA;
END IF;
WHILE X <= Y DO
INSERT INTO tbl_periodo
(DS_NOME_MES)
VALUES(
PERIOD_ADD(EXTRACT(YEAR_MONTH FROM @DATA_INICIAL), X));
SET X =X + 1;
END WHILE;
SELECT CONCAT(RIGHT(DS_NOME_MES,2),' - ', LEFT(DS_NOME_MES,4)) FROM tbl_periodo;
END $$
DELIMITER ;
Hellmann's (Joviano Pott)