Índice del Foro > MySql > PREPARE dentro de procedimiento almacenado |
Autor |
Mensaje |
RompePC Usuario Activo
Registrado: 04 Mar 2013 Mensajes: 227
|
Publicado: Martes 05 Ago 2014 14:45
Título del mensaje: PREPARE dentro de procedimiento almacenado |
|
|
Llevo dos días intentando hacer el equivalente a EXECUTE (SQL) en MySQL, que consiste en un PREPARE, seguido de un EXECUTE, seguido de un DEALLOCATE PREPARE (por lo que he encontrado).
No obstante, siempre me da fallo en el conjunto de líneas anterior (concretamente en PREPARE diría yo, error 1064), no importa lo que haga. Os dejo el código a ver si algún iluminado puede ayudarme (para qué mentirnos, seguramente llegue Pico con su infinita sabiduría a ayudarme ), porque es lo más rebuscado que he encontrado y que a alguna gente le funciona.
Código: |
BEGIN
DECLARE consulta VARCHAR(255) DEFAULT 'SELECT A.id, A.nombre, A.apellido1, A.apellido2
FROM alumno A
INNER JOIN grupo G ON A.grupo_id = G.id';
DECLARE filtros VARCHAR(255);
IF argApellido1 IS NOT NULL THEN
SET filtros = CONCAT('A.apellido1 LIKE CONCAT(', argApellido1, "'%')");
END IF;
IF filtros IS NOT NULL THEN
SET consulta = CONCAT(consulta, ' WHERE ');
END IF;
SET @sentencia = CONCAT(consulta, filtros, ';');
PREPARE sql FROM @sentencia;
EXECUTE sql;
DEALLOCATE PREPARE sql;
END; |
|
|
|
Volver arriba |
|
|
Pico Usuario Activo
Registrado: 25 Jun 2013 Mensajes: 628
|
Publicado: Martes 05 Ago 2014 15:30
Título del mensaje: PREPARE dentro de procedimiento almacenado |
|
|
Si llegar yo, llego, pero no sé ande me he dejado la infinita sabiduría.
Yo no acabo de ver clara la línea
Código: | SET filtros = CONCAT('A.apellido1 LIKE CONCAT(', argApellido1, "'%')"); |
Para mí que sobran comillas o hay que cambiar comillas por corchetes. |
|
|
Volver arriba |
|
|
RompePC Usuario Activo
Registrado: 04 Mar 2013 Mensajes: 227
|
Publicado: Martes 05 Ago 2014 15:46
Título del mensaje: PREPARE dentro de procedimiento almacenado |
|
|
Eso sólo añade una claúsula WHERE. Pero el problema no es ese, sino que PREPARE no funciona; he intentado hacer un simple PREPARE sql FROM 'SELECT * FROM alumno;'; y MySQL me devuelve error de sintaxis. El comando en sí falla, escriba lo que escriba y cómo lo escriba. Supongo que intentaré preguntarles a los de MySQL a ver qué dicen, porque para la 5.5 la sintaxis es la que tengo escrita...
Concretamente el fallo es:
Cita: | ERROR 1064 (42000): 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 'sql FROM "SELECT * FROM alumno" ' at line 1
|
Pero es que otra forma de escribir el comando no hay. |
|
|
Volver arriba |
|
|
RompePC Usuario Activo
Registrado: 04 Mar 2013 Mensajes: 227
|
Publicado: Martes 05 Ago 2014 16:50
Título del mensaje: PREPARE dentro de procedimiento almacenado |
|
|
Lo he arreglado; parece que sql será una palabra reservada o algo... aunque me extraña, porque también he puesto probando y fallaba... no sé, cosas raras las que me pasan sólo a mí. |
|
|
Volver arriba |
|
|
niko4142
Registrado: 20 Mar 2019 Mensajes: 1
|
Publicado: Miércoles 20 Mar 2019 21:57
Título del mensaje: PREPARE dentro de procedimiento almacenado |
|
|
RompePC escribió: | Lo he arreglado; parece que sql será una palabra reservada o algo... aunque me extraña, porque también he puesto probando y fallaba... no sé, cosas raras las que me pasan sólo a mí. |
Quisiera saber como lo arreglo, ya que esto en la misma situación, gracias. |
|
|
Volver arriba |
|
|