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;
我正在学习函数、过程和触发器,我想做一个简单的过程来根据参数计算 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;