MySQL – Creando procedimientos almacenados

Mi segundo intento por usar las caracteristicas que aporta MysQL 5 sobre la versión 4. En esta ocasión el objetivo era crear un procedimiento almacenado, cual ha sido mi sorpresa, cuando he leido que ¡no puede devolver una tabla! de hecho no puede devolver nada, solo las funciones pueden … curioso, pero bueno, aún puede hacer algo por mí, marcar el registro que me interesa.

Bueno, esta vez ha sido menos doloroso, y hasta he conseguido usar un IF. Pero no es facil encontrar ejemplos por la red, tampoco digo que sea dificil, quien quiera que me entienda.

DROP PROCEDURE IF EXISTS `degramm`.`sp_getExpresion` $$
CREATE PROCEDURE `degramm`.`sp_getExpresion` (prmYearWeek varchar(6))
BEGIN

DECLARE nMax   tinyint;
DECLARE id     int;

SELECT nApariciones INTO nMax FROM t_expresiones WHERE sYearWeek = prmYearWeek;

IF @nMax = null THEN
SELECT idExpresion INTO id FROM t_expresiones WHERE nApariciones<@nMax LIMIT 0, 1;
UPDATE t_expresiones SET sYearWeek = prmYearWeek WHERE idExpresion = @id;
END IF;

SELECT * FROM t_expresiones WHERE sYearWeek = prmYearWeek;

END $$

Curiosamente, esta vez no he necesitado usar la arroba en el "SELECT col INTO var".

Un END IF con un punto y coma se me hace raro. Por no hablar de cómo se ejecuta

CALL sp_getExpresion('2007-12')

La utildiad de los parámetros de tipo OUT será si llamas de un procedimiento a otro, sino que me cuente alguien cómo recuperas una variable si en PHP llamas al procedimiento así:

mysql_query("CALL sp_ConParametroTipoOUT '".$EsteValorNoPuedeSerVariadoEnLaVida."'", $dbLink)