Ver Mensaje Individual
  #2 (permalink)  
Antiguo 11/07/2011, 09:06
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Cómo devolver una tabla en Funciones/Procedimientos Almacenados

Para que MySQL te devuelva una tabla en una rutina almacenada, debe ser forzosamente en un Stored Procedure. Una stored function no puede hacerlo porque sólo puede devolver un único valor, y no una tabla.
La ventaja de una SF es que puedes usarla para obtener un valor dado desde una consulta como si fuese una función nativa, por ejemplo.
La sintaxis, siguiendo tu ejemplo sería (para el SP):

Código MySQL:
Ver original
  1. DELIMITER $$
  2. DROP PROCEDURE IF EXISTS procedimiento1$$
  3. CREATE PROCEDURE procedimiento1()
  4.     SELECT codPostal, count(codPostal)
  5.     FROM afiliados a  INNER JOIN gruposfamiliares gf ON a.grupoFamiliar=gf.idGrupoFamiliar
  6.     WHERE estadoAfiliado(a.idAfiliado)=1
  7.     GROUP BY codPostal;
  8. END$$
  9. DELIMITER;

Respecto al SF:
Código MySQL:
Ver original
  1. DELIMITER $$
  2. CREATE FUNCTION cantidadDepto(depto int) RETURNS INT
  3.     DECLARE total INT;
  4.     SET total = (SELECT COUNT(a.idAfiliado)
  5.                        FROM afiliados a INNER JOIN gruposFamiliares gf ON a.grupoFamiliar=gf.idGrupoFamiliar
  6.                        WHERE gf.codpostal=depto);
  7.     RETURN total;
  8. END$$
  9. DELIMITER;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)