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

Sintaxis CREATE PROCEDURE (con TEMPORARY TABLE)

Estas en el tema de Sintaxis CREATE PROCEDURE (con TEMPORARY TABLE) en el foro de Mysql en Foros del Web. Buenas, Llevo toda la mañana volviéndome loco con un CREATE PROCEDURE, he mirado todos los foros y no he conseguido detectar el error de sintaxis. ...
  #1 (permalink)  
Antiguo 08/10/2008, 05:34
 
Fecha de Ingreso: octubre-2008
Mensajes: 8
Antigüedad: 15 años, 6 meses
Puntos: 0
Exclamación Sintaxis CREATE PROCEDURE (con TEMPORARY TABLE)

Buenas,
Llevo toda la mañana volviéndome loco con un CREATE PROCEDURE, he mirado todos los foros y no he conseguido detectar el error de sintaxis. Pongo a continuación el código por si alguien lo viera:

El error que da es:
#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 '' at line 25

[La línea 25 corresponde al final del CREATE TEMPORARY -> );]

CREATE PROCEDURE spActClientes(
IN telefonoC char(9) ,
IN nombreC varchar(150) ,
IN direccionC varchar(500) ,
IN poblacionC varchar(100) ,
IN postalC smallint(8) unsigned,
IN email varchar(200) ,
IN nPucheros smallint(6) ,
IN valorPucheros decimal(10, 2) ,
IN bloqueaC tinyint(1) ,
IN memo varchar(2000)
)
BEGIN
CREATE TEMPORARY TABLE tTemp(
`telefonoC` char(9) ,
`nombreC` varchar(150) ,
`direccionC` varchar(500) ,
`poblacionC` varchar(100) ,
`postalC` smallint(8) unsigned,
`email` varchar(200) ,
`nPucheros` smallint(6) ,
`valorPucheros` decimal(10, 2) ,
`bloqueaC` tinyint(1) ,
`memo` varchar(2000)
);

INSERT INTO tTempo
VALUES
telefonoC,nombreC,direccionC,poblacionC,postalC,em ail,nPucheros,valorPucheros,bloqueaC,memo;
END;

Muchas gracias
  #2 (permalink)  
Antiguo 08/10/2008, 06:11
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, 4 meses
Puntos: 2658
Respuesta: Sintaxis CREATE PROCEDURE (con TEMPORARY TABLE)

El error no está en la línea 25. Es allí donde comienza el problema, pero no donde está.
La cosa tiene tres problemas:
1. No veo la línea de cambio de delimitador, por lo que si estás intentando correr el script sin ellas (la de inicio y la de fin), te dará siempre error porque cortará la carga en la línea en cuestión.
2. No se debe usar los nombres de campos como nombres de variables entrantes. Genera errores de almacenamiento. SQL no es un lenguaje de programación orientado a objetos, así que una variable llamada `poblacionC` y un campo `poblacionC` son la misma cosa para el SQL.
3. La sentencia de inserción está mal escrita. Los valores van encerrados entre paréntesis, como también lo van los campos listados en el nombre de la tabla en que se insertan, si no se van a insertar todos.

La s,intaxis correcta para correrlo en consola quedaría mas o menos así:
Código SQL:
Ver original
  1. DELIMITER $$
  2.  
  3. CREATE PROCEDURE spActClientes(
  4. IN telefonoV CHAR(9) ,
  5. IN nombreV VARCHAR(150) ,
  6. IN direccionV VARCHAR(500) ,
  7. IN poblacionV VARCHAR(100) ,
  8. IN postalV SMALLINT(8) UNSIGNED,
  9. IN email VARCHAR(200) ,
  10. IN nPucherosV SMALLINT(6) ,
  11. IN valorPucherosV DECIMAL(10, 2) ,
  12. IN bloqueaV tinyint(1) ,
  13. IN memoV VARCHAR(2000)
  14. )
  15. BEGIN
  16. CREATE TEMPORARY TABLE tTemp(
  17. `telefonoC` CHAR(9) ,
  18. `nombreC` VARCHAR(150) ,
  19. `direccionC` VARCHAR(500) ,
  20. `poblacionC` VARCHAR(100) ,
  21. `postalC` SMALLINT(8) UNSIGNED,
  22. `email` VARCHAR(200) ,
  23. `nPucheros` SMALLINT(6) ,
  24. `valorPucheros` DECIMAL(10, 2) ,
  25. `bloqueaC` tinyint(1) ,
  26. `memo` VARCHAR(2000)
  27. );
  28.  
  29. INSERT INTO tTempo
  30. VALUES (telefonoV, nombreV, direccionV, poblacionV,
  31. postalV, emailV, nPucherosV, valorPucherosV, bloqueaV, memoV);
  32. END$$
  33.  
  34. 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)
  #3 (permalink)  
Antiguo 08/10/2008, 06:48
 
Fecha de Ingreso: octubre-2008
Mensajes: 8
Antigüedad: 15 años, 6 meses
Puntos: 0
De acuerdo Respuesta: Sintaxis CREATE PROCEDURE (con TEMPORARY TABLE)

Muchas gracias! Ya está solucinado, comento el tema por si le sirve a alguien:

Sobre el (1) y el (3) ya había probado diferentes maneras.
Mi problema realmente era el (2); lo de los nombres de variables y campos. Una vez solucionado eso no ha habido problema, aunque la consulta que finalmente he conseguido ejecutar ha sido la siguiente:

Código:
DELIMITER $$
 
CREATE PROCEDURE spActClientes(
IN telefonoV varchar(9) ,
IN nombreV varchar(150) ,
IN direccionV varchar(500) ,
IN poblacionV varchar(100) ,
IN postalV smallint(8) UNSIGNED,
IN email varchar(200) ,
IN nPucherosV smallint(6) ,
IN valorPucherosV decimal(10, 2) ,
IN bloqueaV tinyint(1) ,
IN memoV varchar(2000)
)
BEGIN
CREATE TEMPORARY TABLE tTemp(
`telefonoC` varchar(9) ,
`nombreC` varchar(150) ,
`direccionC` varchar(500) ,
`poblacionC` varchar(100) ,
`postalC` smallint(8) UNSIGNED,
`email` varchar(200) ,
`nPucheros` smallint(6) ,
`valorPucheros` decimal(10, 2) ,
`bloqueaC` tinyint(1) ,
`memo` varchar(2000)
);

INSERT INTO tTempo
  (`telefonoC`,`nombreC`,`direccionC`,`poblacionC`,`postalC`,`email`,`nPucheros`,`valorPucheros`,`bloqueaC`,`memo`)
VALUES
  (telefonoV, nombreV, direccionV, poblacionV, postalV, emailV, nPucherosV, valorPucherosV, bloqueaV, memoV);
END$$
 
DELIMITER ;
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 05:06.