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

procedure

Estas en el tema de procedure en el foro de Mysql en Foros del Web. Hola, tengo que actualizar tres tablas a la vez dentro de un procedure. Segun he podido entender por internet es que se haria asi: Código: ...
  #1 (permalink)  
Antiguo 23/04/2010, 17:48
 
Fecha de Ingreso: abril-2010
Mensajes: 42
Antigüedad: 14 años
Puntos: 0
procedure

Hola, tengo que actualizar tres tablas a la vez dentro de un procedure. Segun he podido entender por internet es que se haria asi:

Código:
DELIMITER $$
DROP PROCEDURE IF EXISTS `ErabiltzaileaProduktuaAldatu`$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `ErabiltzaileaProduktuaAldatu`(in er int(11))
BEGIN
UPDATE biltegia SET er_kodea=1 WHERE er_kodea=er
UPDATE saldutakoa SET er_kodea=1 WHERE er_kodea=er
UPDATE galdutakoa SET er_kodea=1 WHERE er_kodea=er
END$$

DELIMITER;
pero me da error de sintaxis, que es lo que esta mal? como puedo hacer los tres updates a la vez? Son tres tablas independientes con el mismo campo. Quier que si en alguna tabla el valos es el que le paso, me lo cambie.
  #2 (permalink)  
Antiguo 23/04/2010, 18:15
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, 5 meses
Puntos: 2658
Respuesta: procedure

Te faltan los terminadores de sentencia en las diferentes líneas. En MySQL son obligatorios:
Código MySQL:
Ver original
  1. DELIMITER $$
  2. DROP PROCEDURE IF EXISTS `ErabiltzaileaProduktuaAldatu`$$
  3.  
  4. CREATE DEFINER=`root`@`localhost` PROCEDURE `ErabiltzaileaProduktuaAldatu`(in er int(11))
  5.   UPDATE biltegia SET er_kodea=1 WHERE er_kodea=er;
  6.   UPDATE saldutakoa SET er_kodea=1 WHERE er_kodea=er;
  7.   UPDATE galdutakoa SET er_kodea=1 WHERE er_kodea=er;
  8. END$$
  9.  
  10. DELIMITER;

El DELIMITER se usa en este caso para que el script completo, incluyendo los ";" internos, se tome como una sola estructura.
__________________
¿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 24/04/2010, 02:15
 
Fecha de Ingreso: abril-2010
Mensajes: 42
Antigüedad: 14 años
Puntos: 0
Respuesta: procedure

Hola, les he puesto ; despues de cada instruccion, pero me sigue dando error en el delimitador, me dice signo de puntuacion desconocido. Mi codigo ahora queda asi:

Código:
DELIMITER $$
DROP PROCEDURE IF EXISTS `ErabiltzaileaProduktuaAldatu`$$
 
CREATE DEFINER=`root`@`localhost` PROCEDURE `ErabiltzaileaProduktuaAldatu`(IN er INT(11))
BEGIN
  UPDATE biltegia SET er_kodea=1 WHERE er_kodea=er;
  UPDATE saldutakoa SET er_kodea=1 WHERE er_kodea=er;
  UPDATE galdutakoa SET er_kodea=1 WHERE er_kodea=er;
END$$
 
DELIMITER;
He probado cambiando el $$ a //, quitando...

El error es el siguiente
Código:
#1064 - 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 'DELIMITER' at line 1
Edito que tambien he probado con poner AS antes del BEGIN, no se si es necesario.

Saludos

Última edición por sara_hawari; 24/04/2010 a las 02:21
  #4 (permalink)  
Antiguo 24/04/2010, 05:44
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, 5 meses
Puntos: 2658
Respuesta: procedure

No es necesario poner ese AS antes del BEGIN, que además te daría un error de sintaxis.
El SP tiene una sintaxis correcta para cualquier versión de MySQL 5.x (ya lo comprobé), así que la pregunta es: ¿Qué estás usando para cargar el procedure?
¿Qué aplicación y qué versión de MySQL?
__________________
¿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 25/04/2010, 04:36
 
Fecha de Ingreso: abril-2010
Mensajes: 42
Antigüedad: 14 años
Puntos: 0
Respuesta: procedure

Cita:
Iniciado por gnzsoloyo Ver Mensaje
No es necesario poner ese AS antes del BEGIN, que además te daría un error de sintaxis.
El SP tiene una sintaxis correcta para cualquier versión de MySQL 5.x (ya lo comprobé), así que la pregunta es: ¿Qué estás usando para cargar el procedure?
¿Qué aplicación y qué versión de MySQL?
Pues utilizo el XAMPP 1.7.3 para Windows para hacer la conexion de la aplicacion con la bd de cliente/servidor y el MySQL es el 5.1.41.
Lo he vuelto a probar (copy-paste del de arriba) y me sale lo siguiente:

Código:
Error

consulta SQL:

DELIMITER;

MySQL ha dicho: Documentación
#1064 - 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 'DELIMITER' at line 1
  #6 (permalink)  
Antiguo 25/04/2010, 07:27
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, 5 meses
Puntos: 2658
Respuesta: procedure

Con XAMPP lo que usas es una interfase, pero esa interfase tiene su propio intérprete, y para para cargar el stored procedure lo hace en base a sus propios métodos.
Algunas de estas interfases (caso Navicat), le envían las sentencias a MySQL en conexiones separadas y además le suelen agregar algo al texto, a menos que configures específicamente algún parámetro en el formulario, como en el caso de phpMyadmin, que exige que se indique en un textbox el delimitador a usar.
No he obtenido un manual de uso de XAMPP, por lo que no puedo estar seguro de cómo resolverlo, pero de lo que sí estoy seguro es que no se trata de un problema de sintaxis, sino de la forma en que el XAMPP le envía a MySQL el script, ya que de ser un problema de sintaxis yo no podría haber cargado tu script en my servidor... y sí pude.

Verifica la documentación de XAMPP respeto a la carga de scripts en MySQL.
__________________
¿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: procedure
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 19:59.