Ver Mensaje Individual
  #4 (permalink)  
Antiguo 12/09/2012, 19:30
javahierro
 
Fecha de Ingreso: enero-2012
Mensajes: 23
Antigüedad: 12 años, 11 meses
Puntos: 0
Respuesta: Error de "duplicate key" en inserción cuando no existe tal violación sql

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Código MySQL:
Ver original
  1. IF ctrl_situalab THEN
  2.     INSERT INTO control_situalab (idempleado, fecha1, fecha2, codsitualab, codplnsuel, tipodoc)
  3.     VALUES (idemp, fecha_in, fecha_fn, 3, plnsuel, 'PLNSUEL');                
Efectivamente, es la única parte donde se puede producir.
Hay tres esscenarios poribles:
1) Si la variable idemp es NULL o contiene un valor que no exista en la tabla "empleados".
En otras palabras, un problema de datos. La única solución es verificar manualmente los datos de la tabla que origina ese valor, respecto de la tabla referida (empleados), para corroborar que no haya un dato ilegal en alguna parte.
Hazlo: revisalo.
No tienes idea de la cantidad de veces que nos han asegurado que estaba todo bien, y luego resultó que en realidad había un dato mal guardado de origen...

2) Si el campo idempleado es PK de esa tabla. Siendo PK es único, y si esa tabla se usa para contener información de diferentes momentos de un mismo empleado, hay un error de definición de tabla. La PK en ese caso debe ser de al menos dos campos.

3) El campo en cuestión es UNIQUE, cosa parecida a que sea PK. Tiene en esencia las mismas restricciones.

Por cierto: Hay algunos defectos formales no funcionales en algunas partes del SP (códigos superfluos o innecesarios).
HOla gnzsoloyo! primeramente agradezco el tiempo tomado para revisar mi código y responder a mi problema!
Fijate que manualmente he revisado el insert y funciona pero me entra la duda y es q como dices en el punto 1 que la variables idemp es NULL pero supuestamente le he puesto el handler 1329 para evitar que siga el bucle en caso ya no haya mas registros en el fetch pero pareciera que como que siempre intenta recorrerlo y he puesto un IF en donde si es TRUE o FALSE siempre haga verdadera la variable
"ctrl_situalab" entonces siempre entraria en ese IF donde esta el insert, ahora cuando quito el handler 1329 si funciona el insert y no da problema. Ahora bien anoche hice otras pruebas y es que puse un IF donde pregunto si es uno la variable "no_hay_accpers" y si es asi el respectivo LEAVE, pero ahora puse otro IF donde pregunto si la variable "no_hay_accpers" es cero que haga todo lo que debe hacer cuando el fetch trae registro, todo eso dentro del IF y ahi si no me da problema pero veo que siempre me sale el problema del fetch vacío osea no me funciona el handler 1329, espero me haya dado a entender y sino con gusto te replanteo lo que he intentado esplicarte o si quieres que te de el script completo tu me diras???? Gracias nuevamente de antemano por tu buena intención