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

Error en el procedimiento

Estas en el tema de Error en el procedimiento en el foro de Mysql en Foros del Web. Creando un procedimiento que me permita actualizar, quiero ingresar un documento, pero si ese documento ya existe me actualice los datos y si no que ...
  #1 (permalink)  
Antiguo 25/08/2011, 09:58
Avatar de JeMaGa  
Fecha de Ingreso: julio-2011
Ubicación: Bogota
Mensajes: 430
Antigüedad: 12 años, 8 meses
Puntos: 4
Error en el procedimiento

Creando un procedimiento que me permita actualizar, quiero ingresar un documento, pero si ese documento ya existe me actualice los datos y si no que me inserte ese nuevo documento.

Código MySQL:
Ver original
  1. DELIMITER $$
  2.  
  3. DROP PROCEDURE IF EXISTS `documentacion`.`ActualizarDoc`$$
  4.  
  5. CREATE PROCEDURE `documentacion`.`ActualizarDoc`(in `Codigoo` varchar(20), in `NombreDoc` varchar(30), in `Versions` int, in `Areas` varchar(30), in `Adjuntos` longblob, in `num` boolean)
  6.  
  7.     BEGIN
  8.     set num = (Select `Codigo`,`Nombre`,`Version`,`Adjunto`,`Area` from `datos` where `Codigo`=`Codigoo`
  9.            && `Nombre`=`NombreDoc` && `Version`=`Versions` && `Adjunto`=`Adjuntos` && `Area`=`Areas`);
  10.  
  11.     if num = 1 then
  12.        update `datos` set `Codigo`=`Codigoo` && `Nombre`=`NombreDoc` && `Version`=`Versions` && `Adjunto`=`Adjuntos` && `Area`=`Areas`
  13.        where `Codigo`=`Codigoo` && `Nombre`=`NombreDoc` && `Version`=`Versions` && `Adjunto`=`Adjuntos` && `Area`=`Areas`;
  14.  
  15.     else if num =0 then
  16.        INSERT INTO `datos` (`Codigo`,`Nombre`,`Version`,`Adjunto`,`Area`) VALUES (`Codigoo`,`NombreDoc`,`Versions`,`Adjuntos`,`Areas`);
  17.     END$$
  18.  
  19. DELIMITER ;

Este es el error que sale!!

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 12

Agradezco toda la ayuda!!
  #2 (permalink)  
Antiguo 25/08/2011, 11:18
Avatar de 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, 4 meses
Puntos: 2658
Respuesta: Error en el procedimiento

Hay varios errores:
1) No cerraste el primer IF/THEN con ENDIF.
2) La cláusula opcional es ELSEIF, no ELSE IF.
3) Ibas a tener un error en la primera línea porque no puedes meter un registro en una variable (MySQL no tiene un tipo de dato ROW ni nada que se le parezca).
4) Las variables locales van sin el acento inverso (`), ya que este se reserva para objetos de base de datos (Bases, tablas, columnas, funciones, procedimientos, triggers).
5) Es posible que de todos modos te falle, porque no estoy seguro de que un SP acepte un parámetro LONGBLOB o BLOB. Pruébalo y me dices.
Código MySQL:
Ver original
  1. DELIMITER $$
  2.  
  3. DROP PROCEDURE IF EXISTS `documentacion`.`ActualizarDoc`$$
  4.  
  5. CREATE PROCEDURE `documentacion`.`ActualizarDoc`(IN Codigoo VARCHAR(20), IN NombreDoc VARCHAR(30), IN Versions INT, IN Areas VARCHAR(30), IN Adjuntos LONGBLOB, IN num boolean)
  6.  
  7.     SET num = (SELECT COUNT(*) FROM `datos` WHERE `Codigo`= Codigoo  && `Nombre`= NombreDoc && `Version`= Versions && `Adjunto`= Adjuntos && `Area`=Areas);
  8.  
  9.     IF num = 1 THEN
  10.        UPDATE `datos` SET `Codigo`= Codigoo && `Nombre`= NombreDoc && `Version`= Versions && `Adjunto`= Adjuntos && `Area`= Areas
  11.        WHERE `Codigo`= Codigoo && `Nombre`= NombreDoc && `Version`= Versions && `Adjunto`= Adjuntos && `Area`= Areas;
  12.     ELSEIF num = 0 THEN
  13.        INSERT INTO `datos`(`Codigo`,`Nombre`,`Version`,`Adjunto`,`Area`)
  14.        VALUES (Codigoo, NombreDoc, Versions, Adjuntos, Areas);
  15.     END IF;    
  16. END$$
  17.  
  18. DELIMITER ;
__________________
¿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 25/08/2011, 13:42
Avatar de JeMaGa  
Fecha de Ingreso: julio-2011
Ubicación: Bogota
Mensajes: 430
Antigüedad: 12 años, 8 meses
Puntos: 4
Respuesta: Error en el procedimiento

Hay muchas gracias por tu ayuda al parecer si lo acepta!!!!, pues si se dejo crear el procedimiento muchas gracias!! por toda tu ayuda!!!
bueno lo probé y si me lo actualiza, pero el problema es que no me toma el cod.doc por que??

Última edición por JeMaGa; 25/08/2011 a las 13:57
  #4 (permalink)  
Antiguo 25/08/2011, 15:56
Avatar de 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, 4 meses
Puntos: 2658
Respuesta: Error en el procedimiento

Cita:
bueno lo probé y si me lo actualiza, pero el problema es que no me toma el cod.doc por que??
cod.doc no se ve ni como parámetro del prototipo, ni es un campo invocado.
¿A qué dato te refieres?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: procedimiento, select, sql
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 04:39.