SoloCodigo
Bases de Datos => MySQL => Mensaje iniciado por: jorgedf en Viernes 23 de Octubre de 2009, 15:02
-
Estimados,
Tengo una duda que me tiene vuelto loco, les 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..
*******************************
-
saludos jorgedf,
lo que buscas se llama asi mismo "Dynamic SQL" y al parecer en mysql no la vas a tener tan facil.
te recomiendo estos temas.
http://forums.mysql.com/read.php?60,3127,6260#msg-6260
http://dev.mysql.com/doc/refman/5.4/en/sql-syntax-prepared-statements.html
http://dev.mysql.com/doc/refman/5.4/en/se-db2-errors.html
http://dev.mysql.com/doc/refman/5.4/en/stored-program-restrictions.html
http://dev.mysql.com/doc/refman/5.4/en/sql-syntax-prepared-statements.html
-
saludos jorgedf,
lo que buscas se llama asi mismo "Dynamic SQL" y al parecer en mysql no la vas a tener tan facil.........
si lo se, el problema es que donde trabajo, siempre hemos trabajado con SQL y ORACLE los cuales son motores muy potentes, pero ahora llego un nuevo gerente y para ahorrar costos quiere migrar todas las bases a Mysql :argh:
eso implica migrar DTS y una serie de cosas
mira yo habia hecho esto en MYsql
CREATE DEFINER= PROCEDURE `cuadrado2`(IN numero INTEGER, OUT resultado INTEGER)
SELECT numero*numero INTO resultado $$
y cuanod lo llamo call cuadrado2(5) me entrega el numero 25, es decir funciona
pero cuando hago
CREATE DEFINER= PROCEDURE `valida`(IN nomb VarChar(10))
select count(*) from nomb $$
y cuanod lo llamo call valida("mitabla") me entrega el error que no existe la tabla nomb, es decir por algun motivo no toma el nombre de la variable para el select :hitcomp:
-
:P
si fuera oracle. fuera super facil es como dicen oracle hace de todo excepto parquearte el caro. :P
pues yo creo que no puedes pasar tan alegremente una variable a un FROM.
mira este ejemplo puesto en la documentacion
USE test;
CREATE TABLE t1 (a INT NOT NULL);
INSERT INTO t1 VALUES (4), (8), (11), (32), (80);
SET @table = 't1';
SET @s = CONCAT('SELECT * FROM ', @table);
PREPARE stmt3 FROM @s;
EXECUTE stmt3;
DEALLOCATE PREPARE stmt3;
si notas primero se prepara el string del select y luego se manda a ejecutar. en la misma documentacion dice que no puedes usar cursores porque no estan soportados para este tipo de operacion. punto para oracle. ;)
asi que tendrias que hacer 2 procedures uno con un cursor que tenga el select de la primera tabla y se lo pase como parametro al segundo procedure. y si lo que quieres es tener la data para despues analizarla puedes crear una tabla para insertar: nombre_tabla, count_tabla.
suerte!... sino has huelga y di que oracle es lo maximo! :D