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

Mysql Variable dentro del WHERE

Estas en el tema de Mysql Variable dentro del WHERE en el foro de Mysql en Foros del Web. Dios les bendiga Buenos días amigos de Foros del Web. Dentro de mi BD Mysql tengo un procedimiento almacendo que quiero que lleve la siguiente ...
  #1 (permalink)  
Antiguo 19/11/2015, 11:31
 
Fecha de Ingreso: noviembre-2011
Ubicación: Guayaquil
Mensajes: 33
Antigüedad: 12 años, 4 meses
Puntos: 0
Mysql Variable dentro del WHERE

Dios les bendiga


Buenos días amigos de Foros del Web.


Dentro de mi BD Mysql tengo un procedimiento almacendo que quiero que lleve la siguiente forma:

Código MySQL:
Ver original
  1. decalre cedula varchar(20);
  2. declare condicion varchar (20);
  3.  
  4. set cedula = '0058554525';
  5.  
  6. set condicion = CONCAT("`cedula` = '",cedula,"'", " AND `estado`='Florida'");
  7. Select * from table where (condicion);

Es posible hac
  #2 (permalink)  
Antiguo 19/11/2015, 11:34
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: Mysql Variable dentro del WHERE

Estás trabajando con MySQL, no con SQL Server.

Debes acudir al manual y ver cómo se trabajan las sentencias preparadas: http://dev.mysql.com/doc/refman/5.6/...tatements.html

No es algo sencillo.
__________________
¿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 19/11/2015, 15:19
 
Fecha de Ingreso: noviembre-2011
Ubicación: Guayaquil
Mensajes: 33
Antigüedad: 12 años, 4 meses
Puntos: 0
Respuesta: Mysql Variable dentro del WHERE

Estimado gnzsoloyo


Muchas gracias por responder a mi pregunta


Leí el manual como me sugeristes, sigo teniendo un problema parece ser con las variables vinculadas, comparto el código:
Código MySQL:
Ver original
  1. CREATE PROCEDURE  buscar
  2. (IN `_ruc` VARCHAR(13), IN `_desde` INT(4), IN `_limite` INT(4), IN `_aprobado`)
  3.  
  4.     PREPARE ofertas FROM 'SELECT `ruc`, `tituloOferta` FROM `ofertas` LIMIT ?,?';
  5.     EXECUTE ofertas USING _desde, _limite;
  6.     DEALLOCATE PREPARE ofertas;


Cuando intento ejecutar el código se muestra este error:

Error code 1064, SQL state 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 '_desde, _limite;
DEALLOCATE PREPARE ofertas;

Y no se crea el procedimiento almacenado


Dios les bendiga, esperando por su ayuda..!

Última edición por gnzsoloyo; 20/11/2015 a las 05:11
  #4 (permalink)  
Antiguo 20/11/2015, 00:07
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Mysql Variable dentro del WHERE

Saludo
Imagino que por cuestiones de pruebas el query cambio.

Ahora, analizando el query inicial que se quiere hacer, me parece que
no es necesario hacerlo de ese modo, bastaría con

Código SQL:
Ver original
  1. SELECT * FROM TABLE WHERE `pass` = cedula AND `estado`='Florida';

Sobrando así la variable condición.

Sin embargo, sí se insiste en ello podría ser de este modo

Código SQL:
Ver original
  1. SET @condicion = CONCAT("SELECT * from table WHERE ","`pass` = '",cedula,"'", " AND `estado`='Florida'");
  2. PREPARE stmt1 FROM @condicion;
  3. EXECUTE stmt1;
  4. DEALLOCATE PREPARE stmt1;
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #5 (permalink)  
Antiguo 20/11/2015, 05:41
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: Mysql Variable dentro del WHERE

Cita:
Iniciado por luaugii Ver Mensaje
Estimado gnzsoloyo


Muchas gracias por responder a mi pregunta


Leí el manual como me sugeristes, sigo teniendo un problema parece ser con las variables vinculadas, comparto el código:
Código MySQL:
Ver original
  1. CREATE PROCEDURE  buscar
  2. (IN `_ruc` VARCHAR(13), IN `_desde` INT(4), IN `_limite` INT(4), IN `_aprobado`)
  3.  
  4.     PREPARE ofertas FROM 'SELECT `ruc`, `tituloOferta` FROM `ofertas` LIMIT ?,?';
  5.     EXECUTE ofertas USING _desde, _limite;
  6.     DEALLOCATE PREPARE ofertas;


Cuando intento ejecutar el código se muestra este error:

Error code 1064, SQL state 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 '_desde, _limite;
DEALLOCATE PREPARE ofertas;

Y no se crea el procedimiento almacenado


Dios les bendiga, esperando por su ayuda..!

Vuelvo a decirte lo que te dije al principio: Tienes que leer el manual de referncia cuando pasas de un DBMS a otro. No tienen las mismas reglas en muchos casos.

http://dev.mysql.com/doc/refman/5.7/...-routines.html

En esta ocasion el problema es que la forma de escribir y crear stored procedures no es igual en todos ellos, y en el caso de MySQL tiene algunas exigencias.
1) Todo SP/SF de más de una linea debe usar bloques BEGIN/END.
2) Dependiendo del modo de insertar al codigo, es posible que requiera el uso de DELIMITER para comenzar y cerrar todo el bloque. Eso ocurre principalmente si usas la consola de MySQL para escribirlo, ya que en phpMyadmin lo maneja internamente, y en el MySQL Workbench también.

En cualquier caso, si fuese por consola de MySQL sería:


Código MySQL:
Ver original
  1. DELIMTER $$
  2. CREATE PROCEDURE  buscar
  3. (IN `_ruc` VARCHAR(13), IN `_desde` INT(4), IN `_limite` INT(4), IN `_aprobado`)
  4.     PREPARE ofertas FROM 'SELECT `ruc`, `tituloOferta` FROM `ofertas` LIMIT ?,?';
  5.     EXECUTE ofertas USING _desde, _limite;
  6.     DEALLOCATE PREPARE ofertas;
  7. END $$
  8. 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)

Etiquetas: procedimientos, variables
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 22:15.