sql >> Databáze >  >> RDS >> Mysql

Vytváření dynamického dotazu v uložené proceduře MySQL

Zřetězujete pArea parametr do neuvozovek SQL. Tedy obsah @Query který připravujete k provedení:

SELECT PinCode FROM Areas WHERE AreaName = Teynampet

Od Teynampet není v uvozovkách, je analyzován jako (n neznámý) SQL identifikátor spíše než řetězec. Měli byste buď:

  • citujte jej ve svém SQL:

    SET @City  = CONCAT(' WHERE AreaName = ', QUOTE(pArea));
    
  • předejte jej připravenému příkazu jako parametr:

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

    a poté:

    EXECUTE stmt USING @param;
    

Proč zde však používat připravená prohlášení? Váš postup lze přepsat jako jednoduchý SELECT (což vyvolává otázku, zda vůbec potřebujete použít uloženou proceduru):

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

(Všimněte si, že bych vám doporučil použít NULL místo prázdného řetězce '' , v takovém případě by výše uvedený test byl pArea IS NULL OR pArea = AreaName ).




  1. Chyba při změně kódu z mysql na mysqli

  2. Je možné volat uloženou proceduru v pohledu?

  3. Zkontrolujte, zda řetězec obsahuje čísla

  4. Laravel 5:spouštějte migrace v prostředí serveru, nikoli v místním prostředí