Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Cómo devolver una tabla en Funciones/Procedimientos Almacenados

Estas en el tema de Cómo devolver una tabla en Funciones/Procedimientos Almacenados en el foro de Mysql en Foros del Web. Hola a todos, estoy haciendo un trabajo y decidi usar mysql en vez de postgresql. Muy bueno hasta que me encontré con un problema en ...
  #1 (permalink)  
Antiguo 11/07/2011, 08:46
 
Fecha de Ingreso: marzo-2011
Mensajes: 6
Antigüedad: 13 años, 1 mes
Puntos: 1
Información Cómo devolver una tabla en Funciones/Procedimientos Almacenados

Hola a todos, estoy haciendo un trabajo y decidi usar mysql en vez de postgresql. Muy bueno hasta que me encontré con un problema en las funciones almacenadas al tratar de devolver una tabla.
Quiero saber cual es la sintáxis o que tengo que hacer para que una función de este tipo:

----------------------------------------------------------------------
SELECT codPostal, count(codPostal) FROM afiliados a,gruposfamiliares gf WHERE a.grupoFamiliar=gf.idGrupoFamiliar and estadoAfiliado(a.idAfiliado)=1 group by codPostal;
----------------------------------------------------------------------

...pueda ser devuelta invocando una funcion o procedimiento almacenado.

Con funciones que devuelven un valor me funciona:

----------------------------------------------------------------------
--DEVUELVE LA CANTIDAD DE PERSONAS DE UN DEPARTAMENTO QUE SE PASA COMO PARAMETRO

delimiter //
CREATE FUNCTION cantidadDepto(depto int) RETURNS int

BEGIN

declare total int;

set total := (select count(a.idAfiliado) from afiliados a, gruposFamiliares gf where a.grupoFamiliar=gf.idGrupoFamiliar and gf.codpostal=depto);
RETURN total;
END
//
delimiter ;
----------------------------------------------------------------------

Espero su respuesta! saludos!
  #2 (permalink)  
Antiguo 11/07/2011, 09:06
Avatar de 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, 4 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)
  #3 (permalink)  
Antiguo 11/07/2011, 12:23
 
Fecha de Ingreso: marzo-2011
Mensajes: 6
Antigüedad: 13 años, 1 mes
Puntos: 1
Respuesta: Cómo devolver una tabla en Funciones/Procedimientos Almacenados

Gracias ;) capaz era eso... estaba peleando con funciones cuando tendría que haber sido un procedure.

Ahora lo llamo con call y listo parece.
  #4 (permalink)  
Antiguo 11/07/2011, 12:33
Avatar de 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, 4 meses
Puntos: 2658
Respuesta: Cómo devolver una tabla en Funciones/Procedimientos Almacenados

__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: funcion, procedimiento, tabla, almacenar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:33.