sql >> Base de Datos >  >> RDS >> Mysql

El procedimiento almacenado de Mysql no toma el nombre de la tabla como parámetro

Un SP no se puede optimizar con un nombre de tabla dinámico, por lo que muchas bases de datos, incluido MySQL, no permiten que los nombres de las tablas se especifiquen dinámicamente.

Una forma de evitar esto es usar Dynamic SQL.

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$$