我想在程序中进一步使用从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 ;
请问有人帮忙吗?
感谢, 利奥
答案 0 :(得分:5)
尝试将'SELECT 1,2改为v_1,v_2'改为
'SELECT @v_1:=1, @v_2:=2'
或者至少确保在引用你的vars时使用@。有关详细信息,请参阅此主题: SELECT INTO Variable in MySQL DECLARE causes syntax error?
答案 1 :(得分:1)
如果您的过程中不需要动态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)更安全,因为对另一个存储过程的调用可能会更改用户定义的变量值。
答案 2 :(得分:0)
您需要修改一些代码才能正常工作 看我的修改
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;