Ver Mensaje Individual
  #9 (permalink)  
Antiguo 13/07/2012, 11:10
elpropiopato23
 
Fecha de Ingreso: octubre-2011
Ubicación: Niquitao
Mensajes: 28
Antigüedad: 12 años, 6 meses
Puntos: 0
Respuesta: Pasar nombre de Campo o tabla a una Variable de Usuario en una consulta de

Que pena nuevamente a los 2, yo estaba ejecutando mal el stored Procedure,
Pero si estaba Correcto, solo que no me fije y yo estaba ejecutando mal la sentencia dentro del subquery
SELECT grade.* FROM stream INNER JOIN grade ON stream.claveprimaria = grade.idgrade
WHERE stream.idstream IN (SELECT * FROM stream order by idstream DESC LIMIT 1)

Como el asterisco afecta la consulta por eso me estaba saliendo este error: Operand should contain 1 column(s)

Cuando tiene que ser así:
SELECT grade.* FROM stream INNER JOIN grade ON stream.claveprimaria = grade.idgrade
WHERE stream.idstream IN (SELECT idstream FROM stream order by idstream DESC LIMIT 1)


Por lo tanto aqui les dejo los 2 ejemplos de como hice este Stored Procedure:

Sin Subquery pero asignandole la consulta a una variable:
DELIMITER $$

DROP PROCEDURE IF EXISTS `leer` $$
CREATE DEFINER=`database` PROCEDURE `readdata`(IN tabla VARCHAR(100), IN idcampo VARCHAR(50))
BEGIN
DECLARE lastregistry INT;
SET lastregistry = (SELECT idstream FROM stream order by idstream DESC LIMIT 1);
SET @snt = CONCAT('SELECT ' ,tabla,'.* FROM stream INNER JOIN ',tabla ,' ON stream.claveprimaria = ',tabla,'.',idcampo,
' WHERE stream.idstream = ', lastregistry);
PREPARE sent FROM @snt;
EXECUTE sent;
DEALLOCATE PREPARE sent;
END $$

DELIMITER ;

Con Subquery pero sin asignarle la consulta a una variable

DELIMITER $$

DROP PROCEDURE IF EXISTS `lastoperation` $$
CREATE DEFINER=`database` PROCEDURE `readdata`(IN tabla VARCHAR(100), IN idcampo VARCHAR(50))
BEGIN
SET @snt = CONCAT('SELECT ' ,tabla,'.* FROM stream INNER JOIN ',tabla ,' ON stream.claveprimaria = ',tabla,'.',idcampo,
' WHERE stream.idstream = ( SELECT idstream FROM stream order by idstream DESC LIMIT 1)');
PREPARE sent FROM @snt;
EXECUTE sent;
DEALLOCATE PREPARE sent;
END $$

DELIMITER ;

Estoy muy agradecido por sus ayudas.

Última edición por elpropiopato23; 13/07/2012 a las 11:48