MySQL 过程 IN 变量不能正常工作

MySQL Procedure IN variable don't work properly

我正在学习函数、过程和触发器,我想做一个简单的过程来根据参数计算 table 中的行数。

create procedure countRows(IN v varchar(30))
SELECT COUNT(*) FROM v;

如果我这样做,有人能告诉我为什么吗:

call countRows('sometable'); 
call countRows(sometable); //I tried both

就是行不通

抱歉这个新手问题。

你需要动态 sql.

返回作为参数传递给 sp

的任何 table 的计数的解决方案
DELIMITER $$

CREATE PROCEDURE `countRows`(IN v varchar(30))
    BEGIN
    SET @t1 =CONCAT("SELECT COUNT(*) FROM  ",V);
     PREPARE stmt3 FROM @t1;
     EXECUTE stmt3;
     DEALLOCATE PREPARE stmt3;
   END$$
DELIMITER ;

执行

call countRows('sometable');

更新:针对作为参数传递给 sp

的 table 返回 "Table x contain n row(s)" 的解决方案
DELIMITER $$

CREATE PROCEDURE `countRowsEx`(IN v VARCHAR(30))
    BEGIN
    -- SET @t1 =CONCAT("SELECT COUNT(*) FROM  ",V);
    SET @t1 =CONCAT('SET @totalRows=(SELECT COUNT(*) FROM  ',v, ' );');
     PREPARE stmt3 FROM @t1;
     EXECUTE stmt3;
     DEALLOCATE PREPARE stmt3;
     SELECT CONCAT( 'Table ', v, ' contains ', @totalRows, ' row', IF(@totalRows>1, 's',''));
   END$$
DELIMITER ;

执行

call countRowsEx('sometable');

试试这个:

call countRows('v');

您可以为此使用 information_schema。

例如,要查找名称存储在变量 v 中的 table 的行数,请使用:

select table_rows from information_schema.tables where table_name = v;