sql >> Database teknologi >  >> RDS >> Mysql

Oprettelse af dynamisk forespørgsel i Stored Procedure MySQL

Du sammenkæder pArea parameter ind i SQL'en uden anførselstegn. Det vil sige indholdet af @Query som du forbereder til udførelse er:

SELECT PinCode FROM Areas WHERE AreaName = Teynampet

Siden Teynampet er uden anførselstegn, parses den som en (n ukendt) SQL-id i stedet for en streng. Du skal enten:

  • citer det i din SQL:

    SET @City  = CONCAT(' WHERE AreaName = ', QUOTE(pArea));
    
  • videregive det til den forberedte erklæring som en parameter:

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

    og derefter:

    EXECUTE stmt USING @param;
    

Men hvorfor bruge forberedte udsagn her? Din procedure kan omskrives som en simpel SELECT (hvilket rejser spørgsmålet om, hvorvidt du overhovedet skal bruge en lagret procedure):

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

(Bemærk, at jeg vil anbefale dig at bruge NULL i stedet for den tomme streng '' , i hvilket tilfælde ovenstående test ville være pArea IS NULL OR pArea = AreaName ).




  1. Slide-dæk og prøver fra #SQLintersection

  2. Sådan formateres datoer i Oracle

  3. mysql søg efter en catid i et tekstfelt

  4. Sådan fungerer PATINDEX()-funktionen i SQL Server (T-SQL)