Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Gespeicherte Mysql-Prozeduren nehmen den Tabellennamen nicht als Parameter

Ein SP kann nicht mit einem dynamischen Tabellennamen optimiert werden, daher erlauben viele DBs, einschließlich MySQL, keine dynamische Angabe von Tabellennamen.

Eine Möglichkeit, dies zu umgehen, ist die Verwendung von 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$$