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

Comprobacion de Procedimiento Almacenado

Estas en el tema de Comprobacion de Procedimiento Almacenado en el foro de Mysql en Foros del Web. Que onda banda, tengon detalle en el codigo, me gustaria que actualiza un dato si, comprueba que existe asi de simple. Buscan si hay actualiza, ...
  #1 (permalink)  
Antiguo 24/12/2012, 03:57
Avatar de jmacc  
Fecha de Ingreso: marzo-2007
Ubicación: Mexico
Mensajes: 94
Antigüedad: 17 años, 8 meses
Puntos: 6
Busqueda Comprobacion de Procedimiento Almacenado

Que onda banda, tengon detalle en el codigo,
me gustaria que actualiza un dato si, comprueba que existe asi de simple.

Buscan si hay actualiza, si no inserta.
Les dejo el codigo:
Código MySQL:
Ver original
  1. DELIMITER $$
  2.  
  3. CREATE DEFINER=`root`@`localhost` PROCEDURE `cartera`(in grupoCP int(100),in pagoCP int(100),
  4. in cantidadCP int(100),in cantidadFaltanteCP INT(100),in fechaRegistroACP date,
  5. in ultimaFichaCP int(100),in idSC int(5),idS int (5))
  6.     declare existe bool;
  7. select grupoCp from cartera_pagos where grupoCP=grupoCP;
  8.    
  9. if existe then
  10.     update cartera_pagos set pagoCp=pagoCP AND fechaRegistroACp=fechaRegistroACP AND idSC=idSc WHERE grupoCp=grupoCP;
  11.     insert into cartera_pagos (grupoCP,pagoCp,cantidadCp,cantidadFaltanteCp,fechaRegistroACp,ultimaFichaCp,idSc,idS)
  12.         values(grupoCP,pagoCP,cantidadCP,cantidadFaltanteCP,fechaRegistroACP,ultimafichaCP,idSC,idS);
El problema solo inserta,no actualiza si existe.
__________________
Los bueno Chicos Acaban Primero.
User Linux: #527435
  #2 (permalink)  
Antiguo 24/12/2012, 04:24
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Comprobacion de Procedimiento Almacenado

Cita:
El problema solo inserta,no actualiza si existe.
Porque en ningún momento estas asignándole valor a la variable existe. Sólo la estás declarando, pero no haces nada con ella, entonces su valor es NULL. Como NULL no es un dato, entonces saldrá siempre por el ELSE.
Siempre.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 24/12/2012, 17:40
Avatar de jmacc  
Fecha de Ingreso: marzo-2007
Ubicación: Mexico
Mensajes: 94
Antigüedad: 17 años, 8 meses
Puntos: 6
Respuesta: Comprobacion de Procedimiento Almacenado

Grax... gnzsoloyo lo resolví de la siguiente manera, si se puede mejorar se agradecerá el comentario.

Código MySQL:
Ver original
  1. -- --------------------------------------------------------------------------------
  2. -- Routine DDL
  3. -- Note: comments before and after the routine body will not be stored by the server
  4. -- --------------------------------------------------------------------------------
  5. DELIMITER $$
  6.  
  7. CREATE DEFINER=`root`@`localhost` PROCEDURE `cartera`(in grupoCPP int(100),in pagoCPP int(100),
  8. in cantidadCPP int(100),in cantidadFaltanteCPP INT(100),in fechaRegistroACPP date,
  9. in ultimaFichaCPP int(100),in idSCP int(5),idSP int (5))
  10.     declare existe int(5);
  11.  
  12. set existe=(select count(*)as Cantidad from cartera_pagos where grupoCp=grupoCPP);
  13.    
  14. if existe >= 1 then
  15.     update cartera_pagos set pagoCp=pagoCPP,fechaRegistroACp=fechaRegistroACPP,idSC=idScP WHERE grupoCp=grupoCPP;
  16.     insert into cartera_pagos (grupoCP,pagoCp,cantidadCp,cantidadFaltanteCp,fechaRegistroACp,ultimaFichaCp,idSc,idS)
  17.         values(grupoCPP,pagoCPP,cantidadCPP,cantidadFaltanteCPP,fechaRegistroACPP,ultimafichaCPP,idSCP,idSP);
  18.  
__________________
Los bueno Chicos Acaban Primero.
User Linux: #527435

Última edición por gnzsoloyo; 24/12/2012 a las 18:50

Etiquetas: mysl, php, procedimiento_almacenado
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 08:13.