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

O procedimento armazenado do MySQL não aceita o nome da tabela como parâmetro


Um SP não pode ser otimizado com um nome de tabela dinâmico, então muitos DBs, MySQL incluído, não permitem que nomes de tabela sejam especificados dinamicamente.

Uma maneira de contornar isso é usar o SQL dinâmico.
CREATE DEFINER=`root`@`localhost` PROCEDURE `test_proc`(IN serviceName VARCHAR(10),IN newsInfoTable VARCHAR(100))
BEGIN                  
    SET @sql = CONCAT('SELECT COUNT(*) FROM ',newsInfoTable,' WHERE newsServiceName=?;'); 
    PREPARE s1 from @sql;
    SET @paramA = serviceName;
    EXECUTE s1 USING @paramA;
END$$