Ver Mensaje Individual
  #2 (permalink)  
Antiguo 25/02/2009, 04: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: 17 años, 2 meses
Puntos: 2658
Respuesta: Problema con Store procedure, help me!!

Hay dos problemas: a la sentencia INSERT le falta el INTO:
Código sql:
Ver original
  1. DELIMITER $$
  2. INSERT INTO datos_usuarios VALUES(nombre_usuario);

Y además, el problema es que los scripts de SP o de SF, cuando usan las cláusulas BEGIN/END, deben forzosamente desactivar los delimitadores de sentencias, que en este caso es el punto y coma. Esto se debe a que un SP debe ser ingresado como un sólo bloque desde la primera línea hasta la última, y si MySQL encuentra un terminador de sentencia antes del final, intenta compilarlo, dando un error.
Entonces, la solución es ponerle al script una sentencia especial que sólo se usa para esto: DELIMITER. Esta cambia el delimitador de sentencia por otro caracter o conjunto de caracteres. Es conveniente usar conjuntos y no caracteres simples, para que no se generen errores accidentales. En ese caso, lo que se suele usar es un doble signo "$":
Código sql:
Ver original
  1. DELIMITER $$
  2. CREATE PROCEDURE nuevo (nombre_usuario INT)
  3. BEGIN
  4. INSERT INTO datos_usuarios VALUES(nombre_usuario);
  5. END$$
  6. DELIMITER ;

Cuando termina el script debe volverse a poner el delimitador por default o de lo contrario permanecerá el mismo $$.

Un tip final:
Esto solamente funciona al ejecutar scripts o al trabajar con MySQL en modo consola. Si lo haces desde programación de una aplicación, el DELIMITER no se usa.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)