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

Creazione di query dinamiche in Stored procedure MySQL

Stai concatenando la pArea parametro nell'SQL senza virgolette. Cioè, il contenuto di @Query che prepari per l'esecuzione è:

SELECT PinCode FROM Areas WHERE AreaName = Teynampet

Da Teynampet non è tra virgolette, viene analizzato come identificatore SQL (n sconosciuto) anziché come stringa. Dovresti:

  • citalo nel tuo SQL:

    SET @City  = CONCAT(' WHERE AreaName = ', QUOTE(pArea));
    
  • passalo all'istruzione preparata come parametro:

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

    e poi:

    EXECUTE stmt USING @param;
    

Tuttavia, perché usare qui le dichiarazioni preparate? La tua procedura può essere riscritta come un semplice SELECT (che solleva la questione se sia necessario utilizzare una procedura memorizzata):

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

(Nota che ti consiglio di usare NULL invece della stringa vuota '' , nel qual caso il test precedente sarebbe pArea IS NULL OR pArea = AreaName ).