Mysql
 sql >> Base de données >  >> RDS >> Mysql

Création d'une requête dynamique dans la procédure stockée MySQL

Vous concaténez la pArea paramètre dans le SQL sans guillemets. Autrement dit, le contenu de @Query que vous préparez pour l'exécution est :

SELECT PinCode FROM Areas WHERE AreaName = Teynampet

Depuis Teynampet n'est pas entre guillemets, il est analysé comme un identifiant SQL (n inconnu) plutôt que comme une chaîne. Vous devez soit :

  • citez-le dans votre SQL :

    SET @City  = CONCAT(' WHERE AreaName = ', QUOTE(pArea));
    
  • passez-le à l'instruction préparée en tant que paramètre :

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

    puis :

    EXECUTE stmt USING @param;
    

Cependant, pourquoi utiliser des instructions préparées ici ? Votre procédure peut être réécrite comme un simple SELECT (ce qui soulève la question de savoir si vous avez besoin d'utiliser une procédure stockée):

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

(Notez que je vous recommande d'utiliser NULL au lieu de la chaîne vide '' , auquel cas le test ci-dessus serait pArea IS NULL OR pArea = AreaName ).