gpt4 book ai didi

MySQL Procedure IN 变量不能正常工作

转载 作者:太空宇宙 更新时间:2023-11-03 11:58:45 26 4
gpt4 key购买 nike

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

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

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

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

根本行不通

抱歉这个新手问题。

最佳答案

你需要动态sql。

返回作为参数传递给 sp 的任何表的计数的解决方案

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 的表返回“表 x 包含 n 行”的解决方案

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');

关于MySQL Procedure IN 变量不能正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30642569/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com