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

MySQL WorkBench sintaxis Stored Procedures

Estas en el tema de MySQL WorkBench sintaxis Stored Procedures en el foro de Mysql en Foros del Web. Hola amig@s Pues se me ha complicado un poco el tema de crear los procedimientos almacenados con el workbench, y pues ya le he dado ...
  #1 (permalink)  
Antiguo 03/01/2012, 16:36
 
Fecha de Ingreso: septiembre-2010
Mensajes: 5
Antigüedad: 14 años, 2 meses
Puntos: 0
Exclamación MySQL WorkBench sintaxis Stored Procedures

Hola amig@s

Pues se me ha complicado un poco el tema de crear los procedimientos almacenados con el workbench, y pues ya le he dado n vueltas al asunto pero nada y ya se esta convirtiendo en algo personal jajajaja en serio, esto me está sacando de mis cabales... les dejo el código para que puedan iluminarme... no se que estoy haciendo mal:

Así queda el procedimiento:
-- --------------------------------------------------------------------------------
-- Routine DDL
-- Note: comments before and after the routine body will not be stored by the server
-- --------------------------------------------------------------------------------
DELIMITER $$

CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_crear_usuario`(In nombre varchar(15), In apellido varchar(15), In nick varchar(15), In contraseña varchar(25))
BEGIN
declare nombre varchar(15);
declare apellido varchar(15);
declare nick varchar(15);
declare contraseña varchar(25);

set nombre=nombre;
set apellido=apellido;
set nick=nick;
set contraseña=contraseña;

INSERT INTO usuario (usuario.nombre, usuario.apellido, usuario.nick, usuario.contraseña) VALUES (nombre, apellido, nick, contraseña);
SELECT MAX(usuario.idusuario) FROM usuario;
END

Y al ejecutarlo en mi consulta me lanza el siguiente error:

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 'sp_crear_usuario' at line 1
Línea 59: command.Parameters.AddWithValue("contraseña", password);
Línea 60: conn.Open();
Línea 61: usuario.Id_usuario = Convert.ToInt32(command.ExecuteScalar()); Aquí es donde me marca el error concretamente(o sea al ejecutarse la consulta)
Línea 62: return usuario;
Línea 63: }

Comentarles que utilizo MySQL Workbench 5.2.33CE

En fin les agradecería la ayuda que me puedan brindar, y de ser posible si alguno conoce un manual donde se explique la sintaxis para trabajar con el 'QUERIDISIMO' WorkBench, me seria muy útil.
Saludos
  #2 (permalink)  
Antiguo 03/01/2012, 17:14
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: MySQL WorkBench sintaxis Stored Procedures

Tu problema es doble:
1) Yo ni en sueños usaría caracteres extendidos (la "ñ") para el código de un SP. Incluso ni siquiera lo usaría para el código en VB.Net. Tienden a generar problemas, porque los DBMS no los toman bien, y los lenguajes de programación tienen conflicto con los conectores.
2) A nivel del lenguaje de programación, yo te diría que primero captures las excepciones. Es muy mala práctica programar sin captura de Exceptions... De esa forma no podrás saber jamás qué es lo que te está respondiendo MySQL (acuérdate que MySQL tiene su propio conector .Net y sus propias Exceptions en él).

El SP está sintacticamente bien, pero como te dije, usar caracteres que no existen en inglés es muy mala práctica.
__________________
¿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 03/01/2012, 20:37
 
Fecha de Ingreso: septiembre-2010
Mensajes: 5
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: MySQL WorkBench sintaxis Stored Procedures

Hola
antes que nada te agradezco la respuesta, y sobre la ñ tienes razón, jamas la utilicé, es mas hasta ahora que me lo dices no me doy cuenta, y es que le hice tantos cambios a la tabla, a los procedimientos que llegó un momento que y bueno ahí está el resultado.. de hecho en mi clase, donde encapsulo los datos de usuario el campo se llama password, pero al intentar darle el mismo nombre en el procedimiento pues me lo tomaba como una palabra reservada (y supongo que ahi fue donde metí la pata y escribi cualquier cosa) en fin ya lo he cambiado... Bueno sobre el manejo de excepciones, tengo la mala costumbre de hacer que funcione el código primero y luego incluirlo...

El caso es que ahora me da otro error: me dice que la columna 'nombre' no puede ser null y esta en lo cierto, en la tabla la definí de esa forma, lo que ocurre es que no debería ser null, pues le he pasado valores, lo he comprobado con un breackpoint, me parece que no esta asociando el parámetro que le paso con el campo de la tabla, dejo el fragmento de código:

MySqlCommand command = new MySqlCommand("sp_crear_usuario", conn);
command.CommandType = CommandType.StoredProcedure;
command.Parameters.AddWithValue("nombre", usuario.Nombre);
command.Parameters.AddWithValue("apellidos", usuario.Apellidos);
command.Parameters.AddWithValue("nick", usuario.Nick);
string password = EncriptaPassword(string.Concat(usuario.Nick, usuario.Password));
command.Parameters.AddWithValue("pass", password);
conn.Open();
usuario.Id_usuario = Convert.ToInt32(command.ExecuteScalar());
return usuario;

usuario es una clase donde encapsulo los datos, de manera tal que cuando digo usuario.Nombre obtengo el nombre del usuario que desea loguearse (verificado con breackpoint que al momento de llegar tiene el valor), sin embargo cuando llega a command.ExecuteScalar() me lanza el error que comentaba arriba.

Gracias por las observaciones que me haz hecho, me hubiera llevado un buen rato darme cuenta cuando empezaran a molestar errores por esas cosas. De momento estoy pasando directamente la consulta como un string:

String sql = "INSERT INTO usuario (usuario.nombre, usuario.apellidos, usuario.nick, usuario.pass)VALUES (?nombre, ?apellidos, ?nick, ?pass);SELECT MAX(usuario.idusuario) FROM usuario;";

y lo hace todo OK, solo que cuando hago Parameters.AddWithValues("?pass", password); incluyo el símbolo de interrogación, cosa que intente hacer al crear el procedimiento pero me marca error, como bien decía antes no se que inventar ya para que funcione el procedimiento
Saludos
  #4 (permalink)  
Antiguo 04/01/2012, 03: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: 17 años
Puntos: 2658
Respuesta: MySQL WorkBench sintaxis Stored Procedures

Cita:
incluyo el símbolo de interrogación, cosa que intente hacer al crear el procedimiento pero me marca error, como bien decía antes no se que inventar ya para que funcione el procedimiento
En realidad ese es un problema sencillo. Te convendría mirar el manual del MySQL COnnecto.Net antes (página oficial).
La cosa es:
Código C#:
Ver original
  1. MySqlCommand command = new MySqlCommand("sp_crear_usuario", conn);
  2. command.CommandType = CommandType.StoredProcedure;
  3. command.Parameters.AddWithValue("?nombre", usuario.Nombre);
  4. command.Parameters.AddWithValue("?apellidos", usuario.Apellidos);
  5. command.Parameters.AddWithValue("?nick", usuario.Nick);
  6. string password = EncriptaPassword(string.Concat(usuario.Nick, usuario.Password));
  7. command.Parameters.AddWithValue("?pass", password);
  8. conn.Open();
  9. usuario.Id_usuario = Convert.ToInt32(command.ExecuteScalar());
  10. return usuario;

Detalle: Estos temas no son de este foro. Acá las reglas del foro de bases de datos dicen que no se tratan temas de programación.
Deberías haberlo preguntado en el Foro de .Net.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 04/01/2012, 06:46
 
Fecha de Ingreso: septiembre-2010
Mensajes: 5
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: MySQL WorkBench sintaxis Stored Procedures

Hola

Te agradezco por las molestias que te has tomado... Me indicas que la pregunta es mas para el foro de .net pero en realidad, no está mi problema ahí... hace un buen tiempo vengo desarrollando en .net con C# y como BD SQL, donde no tuve problemas para utilizar y/o crear procedimientos.

La solución que me planteas ya la he intentado (incluso antes de que usted me la hubiera propuesto) pero no hay forma... Solo dejé el código C# para mostrar de que manera intento realizar la consulta y que aparentemente no me toma los datos en los parámetros, pero no creo que sea por la manera de hacerlo, sino porque parece que no se pasan de esa forma, o bien porque el procedimiento no está bien definido en la BD, así que supuse que seria este el lugar correcto para realizar la pregunta... si no es así me disculpo.

Saludos
  #6 (permalink)  
Antiguo 04/01/2012, 06:53
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: MySQL WorkBench sintaxis Stored Procedures

¿Probaste ejecutar el SP manualmente en el WB?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 04/01/2012, 06:57
 
Fecha de Ingreso: septiembre-2010
Mensajes: 5
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: MySQL WorkBench sintaxis Stored Procedures

Me ha servido mucho tu sugerencia de fijarme en MySQl connector para .net, y en efecto, no estoy, según el manual, haciendo bien el paso de parámetros... Lastima que ahora estoy en el trabajo, cuando llegue a casa lo pruebo y comento como me fue, ademas dejo la solución por si alguien lo necesita (he perdido unos días por esta causa), gracias por esta sugerencia.

* Si que lo había probado en el WB
  #8 (permalink)  
Antiguo 04/01/2012, 07:39
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: MySQL WorkBench sintaxis Stored Procedures

__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 04/01/2012, 16:33
 
Fecha de Ingreso: septiembre-2010
Mensajes: 5
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: MySQL WorkBench sintaxis Stored Procedures

Hola...

Lo prometido es deuda... Aquí dejo el procedimiento (resumido)

-- --------------------------------------------------------------------------------
-- Routine DDL
-- Note: comments before and after the routine body will not be stored by the server
-- --------------------------------------------------------------------------------
DELIMITER $$

CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_crear_usuario`(In nombre varchar(15), In apellidos varchar(15), In nick varchar(15), In pass varchar(50))
BEGIN
INSERT INTO usuario (usuario.nombre, usuario.apellidos, usuario.nick, usuario.pass)VALUES (nombre, apellidos, nick, pass);
SELECT MAX(usuario.idusuario) FROM usuario;
END

y se utiliza desde la aplicación:

MySqlCommand command = new MySqlCommand("sp_crear_usuario", conn);
command.CommandType = CommandType.StoredProcedure;
command.Parameters.AddWithValue("@nombre", usuario.Nombre);
command.Parameters.AddWithValue("@apellidos", usuario.Apellidos);
command.Parameters.AddWithValue("@nick", usuario.Nick);
string password = EncriptaPassword(string.Concat(usuario.Nick, usuario.Password));
command.Parameters.AddWithValue("@pass", password);
conn.Open();
usuario.Id_usuario = Convert.ToInt32(command.ExecuteScalar());
usuario.Password = password;
return usuario;

Y todo va de 10, uso el MySQL conector 6.3.6... Saludos

Etiquetas: procedures, sintaxis, stored, workbench
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 03:33.