Procedimiento almacenado el Mysql

Tengo una duda que me tiene vuelto loco, te explico, tengo una tabla "tabla1" con muchos datos ejemplo de tabla1
campo1   campo2
nkjnknj   20091001
mkmk   20091002
huhuh    20091003
el problema es que por cada campo1 de a tabla1 existe una tabla2 con ese nombre, tablas con nombres aleatorios es decir no tengo un patron para el nombre de las tablas, y por cada una de esas tablas necesito hacer un count(*) es decir un
select count(*) from nkjnknj
mi consulta es :existe alguna forma de recorrer la tabla 1, y pasando como referencia los nombres para que me vaya haciendo el count(*) por cada tabla2????
si me puedes ayudar te lo agradeceria muchisimo..
*******************************
Yo he hecho esto,
cree en procedimiento almacenado
CREATE PROCEDURE `revisa` (IN numero varchar(10))
SELECT * from numero
Pero al llamarlo "call revisa(mitabla)" pasando el nombre de las tablas que quiero leer me tira error y me dice que no exite la tabla numero, es decir no logra pasar la variable a la consulta select
ojala me pudieras ayudar, estoy desesperado con esto.

4 respuestas

Respuesta
1
Si, existe una solución: usar un query dinámico. Sabiendo el nombre de la tabla, construyes un query así:
SET @query = CONCAT('SELECT COUNT(*) FROM ', mitabla, ';');
PREPARE sentencia FROM @query;
EXECUTE sentencia;
De esta forma, puedes llamar a ese query cada vez que quieras con el nombre de "mitabla" que te interese.
Hola disculpa, me quedaron unas dudas.
¿Esto funciona en Mysql?
¿Cómo podría integrar esto en un while, en este caso el 'mitabla' lo puedo dejar como variable?
Si, se puede hacer perfectamente dentro de un procedimiento almacenado de mysql.
Para hacer una iteración, es decir, usar varias veces la misma instrucción usando un conjunto de valores, deberías crear un cursor que te extrayese los nombres de las tablas y usarlos tal y como te comentaba.
En el siguiente enlace tienes un ejemplo de como hacer un cursor y controlar cuando has recorrigo todas sus filas.
Experimenta un poco, prueba a hacer lo que pretendes y ya me cuentas si tienes algún problema.
Perdona, se me olvió poner el enlace. Es el siguiente:
http://www.forosdelweb.com/f86/ayuda-cursor-con-mysql-652033/
Respuesta
1
¿Pasa la variable con? Revisa
???? no entendi :S
Para que hacerlo en la base mejor traerlo al fox y allí hacer la que cuente y si quieres hacer una función solo le pasas el nombre de la tabla y la función te devolverá cuantos archivos tiene Ej
Func contar
Para base
consulta=' SQLEXEC(Con,"SELECT * FROM'+base+'","'+base+'")'
&consulta
x=reccount(base)
Retu X
Bueno en la construcción de la consulta creo que mejor poner " afuera y ' adentro si no te función cambia estas comillas y mi conexión se llama Con.
Respuesta
1
No puedes hacer eso por eso te da el error simplemente no puedes mandar de parámetro la tabla que quieres seleccionar, tu lógica esta errónea desde el comienzo, no necesitas crear tablas para cada registro de una tabla, te recomiendo repasar base de datos o algún libro eso no se hace :)
Obviamente no se hace una tabla por cada por cada evento eso lo se, pero la aplicación no la diseñe yo, y así funciona por lo cual solo me resta tratar de hacer lo que me pidieron en la oficina
Gracias de todas formas.
Respuesta
1
Lo que necesitas hacer es un cursor en BD. Es como si tuvieras un arreglo de memoria con filas por dentro. Al recorrer el cursor puedes con un loop, hacer cualquier query que desees.
Esto te ayudara al momento de realizar el query.
http://msdn.microsoft.com/en-us/library/ms180169.aspx

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas