Código de erro:1054. Coluna desconhecida 'SPA' na 'cláusula where'
Isso acontece quando você não coloca a string de entrada entre aspas e o mecanismo SQL tenta identificá-la como uma coluna na tabela que está sendo consultada. Mas ele falha, pois não pode encontrá-lo.
Mas o que acontece quando ele encontra essa coluna?
Ele busca resultados quando encontra algumas correspondências nos valores da coluna.
Obviamente, isso não é o que se esperava.
Como superar isso? Use instruções preparadas com valores de entrada dinâmicos.
Você pode usar espaços reservados como
?
em procedimentos armazenados também em valores de entrada dinâmicos para usar com Prepared Statements
. O mecanismo manipulará caracteres de escape e outros valores de string quando atribuídos ou comparados em expressões SQL. Você só precisa reatribuir entradas de procedimento a uma ou mais variáveis de sessão, conforme necessário.
Exemplo do seu procedimento :
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;