Ver Mensaje Individual
  #2 (permalink)  
Antiguo 25/08/2011, 11:18
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: 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)