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

query dinamica mysql nella procedura memorizzata

Codice di errore:1054. Colonna sconosciuta "SPA" in "clausola where"

Ciò si verifica quando non si racchiude la stringa di input tra virgolette e il motore SQL tenta di identificarla come una colonna nella tabella sottoposta a query. Ma fallisce perché non riesce a trovarlo.

Ma cosa succede quando trova tale colonna?
Recupera i risultati quando trova delle corrispondenze sui valori della colonna.
Ovviamente questo non è quello che ci si aspettava.

Come superare questo? Utilizzare le istruzioni preparate con valori di input dinamici.

Puoi utilizzare segnaposto come ? anche nelle stored procedure su valori di input dinamici da utilizzare con Prepared Statements . Il motore gestirà i caratteri di escape e altri valori di stringa quando assegnati o confrontati all'interno di espressioni SQL.

Devi solo riassegnare gli input della procedura a una o più variabili di sessione, come richiesto.

Esempio sulla tua procedura :

CREATE PROCEDURE `test1`( IN tab_name VARCHAR(40), IN w_team VARCHAR(40) )
BEGIN
  SET @t1 = CONCAT( 'SELECT * FROM ', tab_name, ' where team = ?' ); -- <-- placeholder
  SET @w_team := w_team;

  PREPARE stmt3 FROM @t1;
  EXECUTE stmt3 USING @w_team; -- <-- input for placeholder
  DEALLOCATE PREPARE stmt3;
END;