如何在过程中声明变量 MYSQL

How declare a variable inside a procedure MYSQL

我正在尝试在我的 MySQL:

中执行一个简单的程序
DELIMITER $$

CREATE PROCEDURE `countRows`(IN v varchar(30))
    BEGIN
    DECLARE e INT DEFAULT 0;
    SET @t1 =CONCAT("SELECT COUNT(*) FROM ",V, " INTO",e);
    PREPARE stmt3 FROM @t1;
    EXECUTE stmt3;
    DEALLOCATE PREPARE stmt3;
    SELECT CONCAT("The ",V," table contains ",e," rows");
   END$$
DELIMITER ;

编辑:一切正常,但@t1 不会将值保存在变量中,因此默认情况下第二个查询始终显示 0。

我看不到任何语法错误,请提供一些使这项工作有效的建议?

正如您所指出的,由于您在存储过程中声明了变量 e,它在该环境之外不存在。

我认为问题出在这里:

SET @t1 =CONCAT("SELECT COUNT(*) FROM ",V, " INTO e");

尝试将其更改为:

SET @t1 =CONCAT("SELECT COUNT(*) FROM ",V, " INTO",e);

对于@t2中的语句;不需要准备好的语句,因为它不包含任何要执行的 SQL 语句。下面提到的 3 行代码是不必要的。

PREPARE stmt3 FROM @t2;
EXECUTE stmt3;
DEALLOCATE PREPARE stmt3;

你可以简单地展示一下

SET @t2 =CONCAT("The ",V," table contains ",e," rows");
SELECT @t2;

(或)只是

SELECT CONCAT("The ",V," table contains ",e," rows");

这样,您的程序应该如下所示

DELIMITER $$
CREATE PROCEDURE `countRows`(IN v varchar(30))
BEGIN
DECLARE e INT DEFAULT 0;
SET @t1 =CONCAT("SELECT COUNT(*) FROM ",V, " INTO",e);
SET @t2 =CONCAT("The ",V," table contains ",e," rows");
PREPARE stmt3 FROM @t1;
EXECUTE stmt3;
DEALLOCATE PREPARE stmt3;
SELECT @t2;
END$$
DELIMITER ;

编辑:

使用用户定义的变量尝试这样一次(下面的过程主体)

DELIMITER $$
CREATE PROCEDURE `countRows`(IN v varchar(30))
    BEGIN
    SET @e := 0;
    SET @t1 =CONCAT("SELECT COUNT(*) INTO @e FROM ",V);
    PREPARE stmt3 FROM @t1;
    EXECUTE stmt3;
    DEALLOCATE PREPARE stmt3;
    SELECT CONCAT("The ",V," table contains ",@e," rows");
   END$$
DELIMITER ;