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

Creación de consultas dinámicas en el procedimiento almacenado MySQL

Estás concatenando el pArea parámetro en el SQL sin comillas. Es decir, el contenido de @Query que preparas para la ejecución es:

SELECT PinCode FROM Areas WHERE AreaName = Teynampet

Desde Teynampet no está entre comillas, se analiza como un identificador SQL (desconocido) en lugar de una cadena. Deberías:

  • cítelo en su SQL:

    SET @City  = CONCAT(' WHERE AreaName = ', QUOTE(pArea));
    
  • páselo a la declaración preparada como un parámetro:

    SET @City  = CONCAT(' WHERE AreaName = ?');
    SET @param = pArea;
    

    y luego:

    EXECUTE stmt USING @param;
    

Sin embargo, ¿por qué usar declaraciones preparadas aquí? Su procedimiento se puede reescribir como un simple SELECT (lo que plantea la cuestión de si necesita utilizar un procedimiento almacenado):

CREATE PROCEDURE mp_test(IN pArea VARCHAR(255))
  SELECT PinCode FROM Areas WHERE pArea IN (AreaName, '');

(Tenga en cuenta que le recomiendo que use NULL en lugar de la cadena vacía '' , en cuyo caso la prueba anterior sería pArea IS NULL OR pArea = AreaName ).