如何在过程中声明变量 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 ;
我正在尝试在我的 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 ;