post icon

Como ejecutar SQL dinámico en MySQL

Si necesitamos crear crear una consulta SQL que se vaya armando según algunos patrones, ya sean hechos por el usuario o algunos datos y no queremos crear muchos querys distintos y empezar a evaluar cual se ejecutará podemos recurrir a los SQL Dinámicos.

El mismo es soportado por la mayoría de los motores de base de datos, y en esta entrega veremos como hacerlo en MySQL, en las siguiente veremos como hacerlo en SQL Server y Oracle.

Consiste en crear una variable de texto (varchar en la mayoría de los casos) e ir armando dentro de ella la consulta a ejecutar, luego simplemente qudaría ejecutar la variable.

CREATE DEFINER = 'root'@'localhost'
PROCEDURE BD.STORED_PROCEDURE_1(IN pListaIds VARCHAR(1000))
BEGIN
  -- creamos una variable y concatenamos los textos, la variable
  -- pListaIds recibe varios ID concatenados de una vez
  SET @Query = CONCAT('update tabla set campoX = algunValor where Id in(',pListaIds,')');
  -- preparamos el objete Statement a partir de nuestra variable
  PREPARE smpt FROM @Query;
  -- ejecutamos el Statement
  EXECUTE smpt;
  -- liberamos la memoria
  DEALLOCATE PREPARE smpt;
END

Comentarios desde Facebook:

  1. avatar
    das Google Chrome Windows
    22 abril 2016 at 18:46 #

    gil culiao

  2. avatar
    Gaby UNITED STATES Google Chrome Windows
    15 mayo 2014 at 18:49 #

    Hola

    Tengo una consulta dinámica, funcionaba perfecto, pero se cambio la DB a otro servidor y ya no funciona… me marca el siguiente error:

    Prepared statement needs to be re-prepared

    Alguien sabrá como se puede solucionar?
    de antemano muchas gracias

  3. avatar
    Alejandro VENEZUELA Mozilla Firefox Ubuntu Linux
    11 enero 2011 at 13:06 #

    Hola! Existirá alguna forma de almacenar el resultado de la consulta en una variable? Yo necesito que una variable almacene el resultado de una consulta y no se como hacerlo. Gracias de antemano!

Trackbacks/Pingbacks

  1. Como ejecutar SQL dinámico en SQL Server | DevTroce.com WordPress - 9 noviembre 2010

    […] Recién escribía sobre SQL Dinámico sobre MySQL y aprovecho para escribir también sobre SQL Server. Escencialmente son muy parecidos […]

Responder