3

我想在过程中进一步使用从选择中获得的值到执行中,但不知道如何去做。

作为测试,我编写了以下内容,但不能使用 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 ;

有人可以帮忙吗?

谢谢,狮子座

4

3 回答 3

5

尝试将 'SELECT 1,2 into v_1, v_2' 更改为

'SELECT @v_1:=1, @v_2:=2'

或者至少确保在引用你的变量时使用@。有关更多信息,请参阅此线程: MySQL DECLARE 中的 SELECT INTO 变量导致语法错误?

于 2012-11-12T21:16:37.133 回答
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) 更安全,因为调用另一个存储过程可能会更改您的用户定义变量值。

于 2012-11-12T21:41:31.250 回答
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;
于 2016-12-30T04:43:49.127 回答