Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

consulta dinâmica mysql em procedimento armazenado


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;