sql >> Base de Datos >  >> RDS >> Mysql

consulta dinámica mysql en procedimiento almacenado

Código de error:1054. Columna desconocida 'SPA' en 'cláusula where'

Esto sucede cuando no incluye la cadena de entrada entre comillas y el motor SQL intenta identificarla como una columna en la tabla que se consulta. Pero falla porque no puede encontrarlo.

Pero, ¿qué sucede cuando encuentra dicha columna?
Obtiene resultados cuando encuentra algunas coincidencias en los valores de la columna.
Obviamente, esto no es lo que uno esperaba.

¿Cómo superar esto? Use declaraciones preparadas con valores de entrada dinámicos.

Puede usar marcadores de posición como ? en procedimientos almacenados también en valores de entrada dinámicos para usar con Prepared Statements . El motor manejará los caracteres de escape y otros valores de cadena cuando se asignen o comparen dentro de expresiones SQL.

Solo necesita reasignar las entradas del procedimiento a una o más variables de sesión, según sea necesario.

Ejemplo de su procedimiento :

CREATE PROCEDURE `test1`( IN tab_name VARCHAR(40), IN w_team VARCHAR(40) )
BEGIN
  SET @t1 = CONCAT( 'SELECT * FROM ', tab_name, ' where team = ?' ); -- <-- placeholder
  SET @w_team := w_team;

  PREPARE stmt3 FROM @t1;
  EXECUTE stmt3 USING @w_team; -- <-- input for placeholder
  DEALLOCATE PREPARE stmt3;
END;