Ver Mensaje Individual
  #2 (permalink)  
Antiguo 28/12/2009, 15:55
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: comprobar si existe un registro dentro de un bucle mysql

Simplemente no creo que te funcione porque el parámetro fechas debería ser un TEXT, y los SP en MySQL no los admiten como entrada. Esto es por la presencia de comas dentro del parámetro. Ese tipo de símbolos, para usarlos como los pones, requieren BLOB o TEXT. Para el caso es lo mismo.
Si aún así quieres probar, las forma sería mas o menos:

DELIMITER $$

Código MySQL:
Ver original
  1. DROP PROCEDURE IF EXISTS CNRP_FERIADO $$
  2.  
  3. CREATE PROCEDURE CNRP_FERIADO(IN idferiados INT(11),
  4.                   IN fechas VARCHAR(1250),
  5.                   IN tipos TINYINT,
  6.                   IN numm TINYINT)
  7. DECLARE  validar INT;
  8. DECLARE  estado INT;
  9. DECLARE  fechs VARCHAR(15);
  10.  
  11. IF numm = 1 THEN
  12.     WHILE LENGTH(fechas) > 0 DO
  13.     SET fechs = SUBSTRING_INDEX(fechas, ',', 1);
  14.         SET fechas = SUBSTR(fechas, LENGTH(fechs)+2);
  15.      
  16.        IF (SELECT fechaferiado FROM T_feriado WHERE fechaferiado = fechs) IS NULL THEN
  17.            INSERT INTO t_feriado(fechaferiado, tipoferiado)VALUES(fechs, 1);    
  18.        END IF;
  19.  
  20.     END WHILE;
  21.  
  22. END$$
DELIMITER ;

Lo que pareces estar tratando de hacer es ingresar un conjunto de fechas en un parámetro, separadas por comas, y luego separarlas para ingresarlas una a una. Si esa es la idea, antes de ellos te sugeriría que crearas en el script de PHP un INSERT múltiple, con control de IGNORE, o bien de ON DUPLICATE KEY.
Un INSERT múltiple es una sentencia INSERT escrita de esta forma:
Código MySQL:
Ver original
  1. INSERT INTO a(campos)
  2. VALUES(valores),
  3.    (valores),
  4.    (valores),
  5.    (valores),
  6.    (valores),
  7.    (valores);
En tu caso habría que probar INSERT IGNORE, para que no genere errores de clave duplicada:
Código MySQL:
Ver original
  1. INSERT IGNORE INTO a(campos)
  2. VALUES(valores),
  3.    (valores),
  4.    (valores),
  5.    (valores),
  6.    (valores),
  7.    (valores);
No lo he probado nunca con un ON DUPLICATE KEY siendo un ISERT múltiple. Habría que intentarlo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 28/12/2009 a las 16:03