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

[SOLUCIONADO] Procedimiento no Borra Filas!

Estas en el tema de Procedimiento no Borra Filas! en el foro de Mysql en Foros del Web. Buenas amigos, cree un procedimiento para que haga un ciclo X veces, en ese ciclo hago una consulta capturo el valor en una variable y ...
  #1 (permalink)  
Antiguo 26/06/2013, 14:39
Avatar de JuJoGuAl  
Fecha de Ingreso: julio-2009
Ubicación: Venezuela
Mensajes: 754
Antigüedad: 15 años, 3 meses
Puntos: 19
Procedimiento no Borra Filas!

Buenas amigos, cree un procedimiento para que haga un ciclo X veces, en ese ciclo hago una consulta capturo el valor en una variable y borro los duplicados...

el procedimiento lo arme asi:

Código MySQL:
Ver original
  1. DELIMITER $$
  2.  
  3. CREATE PROCEDURE `borrar_duplicados`(p INT)
  4. DECLARE num INT(1) DEFAULT 0;
  5. DECLARE franq INT(5) DEFAULT 0;
  6. DECLARE cod CHAR(20) DEFAULT 'NINGUNO';
  7. WHILE num < p DO
  8.  
  9. `data_clientes`.`id_franq`,
  10. `data_clientes`.`clientes_cod`
  11. INTO franq,cod
  12. FROM `indicadores`.`data_clientes` GROUP BY id_franq,clientes_cod HAVING count(*) > 1 ORDER BY clientes_cod LIMIT 1;
  13.  
  14. DELETE FROM `indicadores`.`data_clientes` WHERE `id_franq` = @franq AND `clientes_cod` = @cod;
  15.  
  16. SET num = num + 1;
  17.  
  18. END WHILE;
  19.  

lo llamo asi: call borrar_duplicados(1);

y me responde:

call borrar_duplicados(1) 0 row(s) affected 9.641 sec

Porque? y en otra ventana hago una consulta para saber la cantidad de registros que tengo y no me ha borrado nada... que estoy haciendo mal?
  #2 (permalink)  
Antiguo 26/06/2013, 14:50
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 10 meses
Puntos: 447
Respuesta: Procedimiento no Borra Filas!

Hola JuJoGuAl:

Mucho ojo... por un lado estás declarando las variables así:

Código:
DECLARE num INT(1) DEFAULT 0;
DECLARE franq INT(5) DEFAULT 0;
DECLARE cod CHAR(20) DEFAULT 'NINGUNO';
Sin embargo en la consulta les estás colocando un @

Código:
WHERE `id_franq` = @franq AND `clientes_cod` = @cod;
Estamos hablando de cosas distintas. las variables de usuario (con @) no necesitan ser declaradas, pero si no se inicializan tienen asignado el valor NULL.

http://dev.mysql.com/doc/refman/5.0/es/variables.html

puedes hacer la prueba verificando qué valor tienen asignadas estas variables y te darás cuenta del problema.

Saludo
Leo.
  #3 (permalink)  
Antiguo 26/06/2013, 14:50
Avatar de JuJoGuAl  
Fecha de Ingreso: julio-2009
Ubicación: Venezuela
Mensajes: 754
Antigüedad: 15 años, 3 meses
Puntos: 19
Respuesta: Procedimiento no Borra Filas!

Dios e leido mas de lo que tenia a la mano y descubri que no debo de usar los @ en las variables que uso dentro del procedure, hice unos pequeños cambios coloco el codigo...

Código MySQL:
Ver original
  1. DELIMITER $$
  2.  
  3. CREATE PROCEDURE `borrar_duplicados`(p INT)
  4. DECLARE num INT(1) DEFAULT 1;
  5. DECLARE franq INT(5) DEFAULT 0;
  6. DECLARE cod CHAR(20) DEFAULT 'NINGUNO';
  7. WHILE num <= p DO
  8.  
  9. `data_clientes`.`id_franq`,
  10. `data_clientes`.`clientes_cod`
  11. INTO franq,cod
  12. FROM `indicadores`.`data_clientes` GROUP BY id_franq,clientes_cod HAVING count(*) > 1 ORDER BY clientes_cod LIMIT 1;
  13.  
  14. DELETE FROM `indicadores`.`data_clientes` WHERE `id_franq` = franq AND `clientes_cod` = cod;
  15.  
  16. SET num = num + 1;
  17.  
  18. END WHILE;
  19.  
  20. END $$
  21. DELIMITER ;

Bueno leo te me adelantaste aun no soy muy diestro en mysql y procedures... poco a poco aprendo y si vi que ese era mi error... Muchas Gracias!

Etiquetas: borra, procedimiento, registros, select
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 10:58.