Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Dynamische Abfrage in Stored Procedure MySQL erstellen

Sie verketten die pArea Parameter in die SQL ohne Anführungszeichen. Das heißt, der Inhalt von @Query die Sie zur Ausführung vorbereiten, ist:

SELECT PinCode FROM Areas WHERE AreaName = Teynampet

Seit Teynampet nicht in Anführungszeichen gesetzt ist, wird er als (nunbekannter) SQL-Bezeichner und nicht als Zeichenfolge geparst. Sie sollten entweder:

  • zitiere es in deinem SQL:

    SET @City  = CONCAT(' WHERE AreaName = ', QUOTE(pArea));
    
  • übergeben Sie es als Parameter an die vorbereitete Anweisung:

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

    und dann:

    EXECUTE stmt USING @param;
    

Warum aber hier vorbereitete Anweisungen verwenden? Ihre Prozedur kann als einfaches SELECT umgeschrieben werden (was die Frage aufwirft, ob Sie überhaupt eine gespeicherte Prozedur verwenden müssen):

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

(Beachten Sie, dass ich Ihnen die Verwendung von NULL empfehlen würde anstelle des leeren Strings '' , in diesem Fall wäre der obige Test pArea IS NULL OR pArea = AreaName ).