MySQL选择进入变量
我想在这个过程中进一步使用我从select中得到的值,但我不知道如何执行它 作为一个测试,我写了以下内容,但无法使用v_1、v_2或v_3变量进行进一步的逻辑,因为它们没有像我预期的那样接受值1、2和3MySQL选择进入变量,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
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,而且是为了未来的访客。