MySQL - Vistas en procedimientos almacenados

 
Vista:

Vistas en procedimientos almacenados

Publicado por Bryan (2 intervenciones) el 14/04/2009 07:55:20
Hola que tal. Me podrian ayudar? Necesito crear un procedimiento almacenado que me devuelva una consulta intente primero esto:

DELIMITER $$

DROP FUNCTION IF EXISTS `Test` $$
CREATE DEFINER=`root`@`localhost` FUNCTION `Test`(nombre varchar(50)) RETURNS varchar(150)
BEGIN
DECLARE resultado varchar(150);
select perfiles.nombrePerfil into resultado from perfiles where perfiles.nombrePerfil=nombre;
return resultado;
END $$

DELIMITER ;

Pero me da un error que no puede devolver varias filas.

Luego intente esto: crear una vista con los resultados y luego mostrar los datos de la vista con una consulta hacia ella. Pero tampoco :( según lei en la documentación no se puede hacer referencia a un parametro al crear una vista dentro de un procedimiento almacenado.

DELIMITER $$

DROP PROCEDURE IF EXISTS `GenerarVista` $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `GenerarVista`(ID int)
BEGIN
drop view if exists usuariobd.VistaEjemplo;
create view usuariobd.VistaEjemplo as select * from perfiles where perfiles.idPerfiles=ID;

END $$

DELIMITER ;

En resumen simplemente necesito realizar una consulta y obtener los resultados estos resultados pueden ser N según el tipo de consulta que se haga, asi que tampoco puedo definir un valor de retorno por ejemplo varchar(1000) porque puede que sea más o menos el resultado de la consulta..
Que puedo hacer?
Gracias por tomarse el timpo de leer y por la ayuda. Saludos!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Vistas en procedimientos almacenados

Publicado por Gonzalo GC (339 intervenciones) el 14/04/2009 14:14:32
Vamos por partes:
1. Las funciones, como es evidente, no te pueden devolver una tabla de datos porque no existe en MySQL el tipo de datos TABLE, como lo usa MSSQL Server. Solo pueden devolver valores únicos.
2. Destruir y crear una VIEW en un Store procedure es innecesario. Las VIEW son consultas predefinidas que operan como tablas, por lo que solamente es necesario cargarlas una vez y se pueden usar exactamente como si se llamase a una tabla.
3. Un Store procedure te puede devolver lo que necesitas, pero simplemente lo que tienes que hacer es poner como última sentencia de la ejecución, el SELECT que requieres:
DELIMITER $$

DROP FUNCTION IF EXISTS `Test` $$
CREATE PROCEDURE `Test`(IN nombre VARCHAR(50))
BEGIN
SELECT P.nombrePerfil
FROM perfiles P
WHERE P.nombrePerfil=nombre;
END $$
Aún así, te digo que hacer un SP para ejecutar una sentencia SELECT solamente tiene sentido por cuestiones de seguridad, cuando programas en algún lenguaje y le pasas el valor como Parameter (Caso VB.Net, por ejemplo).
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Vistas en procedimientos almacenados

Publicado por Bryan (2 intervenciones) el 14/04/2009 15:53:36
Gracias por la aclaración Gonzalo. Yo lo quería hacer como procedimiento almacenado porque creía que la consulta sería mucho más rapido que si se hace desde código, además la consulta que requiero es del tipo select * from tabla1 UNION select * from tabla2 ..... UNION select * from tablaN

Entonces pense que realizando la consulta en un SP sería mucho más rapido.
Gracias por la ayuda!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Vistas en procedimientos almacenados

Publicado por David Hernandez (1 intervención) el 09/12/2011 04:41:07
Muchas gracias por el apoe habia intentado hacer vistas con procedimientos de muuuuchas maneras no me imagine q fuera algo tan simple, gracias uevamente
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Vistas en procedimientos almacenados

Publicado por estrada (1 intervención) el 26/07/2013 08:36:38
pero jamas se esta poniendo la vista o sii?? segun yo es un procedimiento simple sin vista
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar