MySQL选择进入变量

MySQL选择进入变量,mysql,execute,prepare,Mysql,Execute,Prepare,我想在这个过程中进一步使用我从select中得到的值,但我不知道如何执行它 作为一个测试,我写了以下内容,但无法使用v_1、v_2或v_3变量进行进一步的逻辑,因为它们没有像我预期的那样接受值1、2和3 DROP PROCEDURE IF EXISTS MPT_testing; DELIMITER // CREATE PROCEDURE MPT_testing() READS SQL DATA BEGIN DECLARE v_1 INT; DECLARE v_2 INT; DEC

我想在这个过程中进一步使用我从select中得到的值,但我不知道如何执行它

作为一个测试,我写了以下内容,但无法使用v_1、v_2或v_3变量进行进一步的逻辑,因为它们没有像我预期的那样接受值1、2和3

DROP PROCEDURE IF EXISTS MPT_testing; DELIMITER //  CREATE PROCEDURE MPT_testing() READS SQL DATA BEGIN

  DECLARE v_1 INT;   DECLARE v_2 INT;   DECLARE v_3 INT;
     SET @sql=CONCAT('SELECT 1,2 into v_1, v_2');   PREPARE s1 FROM @sql;   EXECUTE s1;   DEALLOCATE PREPARE s1;

  SET v_3 = v_1 + v_2;

  SELECT v_3;

END //

DELIMITER ;
有人能帮忙吗

谢谢,
Leo

尝试将“选择1,2”更改为“v_1,v_2”

'SELECT @v_1:=1, @v_2:=2'
或者至少确保在引用变量时使用@。有关详细信息,请参阅此线程:

如果过程中不需要动态SQL,可以使用更简单的语法:

DECLARE v_1 INT;   DECLARE v_2 INT;   DECLARE v_3 INT;

SELECT 1,2 into v_1, v_2;
SET v_3 = v_1 + v_2;
SELECT v_3;

使用存储过程中声明的普通变量比用户定义变量(@-variables)更安全,因为调用另一个存储过程可能会更改用户定义变量的值。

您需要修改一些代码才能正常工作 看到我的修改了吗

DECLARE v_1 INT;
DECLARE v_2 INT;
DECLARE v_3 INT;

SET @sql=CONCAT('SELECT 1,2 into @v1, @v2');
PREPARE s1 FROM @sql;
EXECUTE s1;

SELECT @v1, @v2 INTO v_1, v_2;
SET v_3 = v_1 + v_2;
SELECT v_3;

DEALLOCATE PREPARE s1;

嗯,试过了,但没用。问题似乎更多地与准备/执行/取消分配有关。如果我直接执行select into,它会起作用:“DECLARE myvar INT;DECLARE myvar2 INT;select 1,2 into myvar,myvar2;select myvar,myvar2;”但是当我首先准备sql stmt时,它似乎无法识别变量,并且抱怨没有声明它:“DECLARE myvar INT;DECLARE myvar2 INT;SET@sql=CONCAT('SELECT 1,2 into myvar,myvar2');从@sql准备s1;执行s1;解除分配PREPARE s1;选择myvar,myvar2现在找到了解决方案:谢谢slaakso,问题是我需要动态sql,我需要首先动态准备查询,因为我要从不同的表和其他条件中进行选择。虽然这段代码可能会回答这个问题,但提供有关这段代码为什么和/或如何回答这个问题的附加上下文可以提高其长期价值。A好的答案总是会有一个解释,说明做了什么以及为什么这样做,不仅是为了OP,而且是为了未来的访客。