Ver Mensaje Individual
  #7 (permalink)  
Antiguo 06/04/2015, 03:39
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 1064 al crear SP

Eso no funciona en MySQL con los SP...

Por favor, leer el manual de referencia.

Posdata: Bueno, finalmente pudie verificar en mi PC con el uso de MySQL Workbench donde estaba el error, y efectivamente, el problema era el IF principal, porque en el contexto en que lo escribiste estabas poniendo dos condiciones ELSE, tal como lo mencionó superweb360 (aunque debió aclarar exactamente a qué se refería).
Para la logica de cualquier DBMS, no es lo mismo poner:

Código MySQL:
Ver original
  1. IF .... THEN
  2. ELSEIF

que poner

Código MySQL:
Ver original
  1. IF .... THEN
  2.     END IF
Cuando separas ELSEIF en ELSE /IF, estás creando un IF anidado y no dando una condición nueva al mismo IF inicial.

Tenlo en cuenta.

En cuanto al SP de origen, no cambies los delimitadores sino sólo cuando es necesario, y eso es sólo cuando vas a compilar el codigo. No antes.
Código MySQL:
Ver original
  1. USE nombre_base_de_datos;
  2.  
  3. DROP PROCEDURE IF EXISTS SP_ExisteUsuario;
  4.  
  5. DELIMITER $$
  6. CREATE PROCEDURE SP_ExisteUsuario(
  7. IN p_nick_name VARCHAR(25),
  8. IN p_passwd VARCHAR(25),
  9. IN p_email VARCHAR(100),
  10. OUT p_existe INT
  11. )
  12.     -- Valido la existencia del usuario
  13.     IF EXISTS(SELECT usuario_key FROM usuarios WHERE nick_name = p_nick_name) THEN
  14.         IF EXISTS(SELECT usuario_key FROM usuarios WHERE passwd = SHA1(p_passwd)) THEN
  15.             SET p_existe = 1;
  16.         ELSE
  17.             SET p_existe = 0;
  18.         END IF;
  19.     ELSEIF (SELECT usuario_key FROM usuarios WHERE email = p_email) THEN
  20.         IF EXISTS(SELECT usuario_key FROM usuarios WHERE passwd = SHA1(p_passwd)) THEN
  21.             SET p_existe = 1;
  22.         ELSE
  23.             SET p_existe = 0;
  24.         END IF;
  25.     ELSE
  26.         SET p_existe = 0;
  27.     END IF;
  28.  
  29. END $$
  30.  
  31. DELIMITER ;
Ahora bien, cuando usas phpMyadmin para crear SP, no debes usar un script completo como ese, sino solo el bloque de creación del SP, y poner el delimitador en el text box que se encuentra mas abajo del bloque de edicion de SQL.
phpMyadmin se encargará del resto.
__________________
¿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; 06/04/2015 a las 04:08