MySQL选择变量

时间:2012-11-12 21:00:40

标签: 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;   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 ;

请问有人帮忙吗?

感谢, 利奥

3 个答案:

答案 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;