如何通过查询将参数传递给存储过程?

时间:2017-07-24 04:41:05

标签: mysql sql stored-procedures parameter-passing

我有这个存储过程:

CREATE PROCEDURE `test`(OUT `vote_value` INT, OUT `score` INT, IN `user_id` INT, IN `time_range` INT)
    NO SQL
BEGIN
    SELECT coalesce(sum(vote_value), 0), coalesce(sum(score), 0)
      INTO vote_value, score
    FROM reputations
    WHERE owner_id = user_id
      AND date_time > CASE time_range
          WHEN 'WEEK' 
          THEN  unix_timestamp(DATE_SUB(now(), INTERVAL 1 WEEK))
          WHEN 'MONTH' 
          THEN  unix_timestamp(DATE_SUB(now(), INTERVAL 1 MONTH))
          WHEN 'YEAR' 
          THEN  unix_timestamp(DATE_SUB(now(), INTERVAL 1 YEAR))
          ELSE 1 END;
END

如您所见,我的程序获得了4个参数。 vote_valuescore都有OUT方向(结果),而user_idtime_range都有IN方向。因此,当我调用该过程时,我必须通过那两个IN方向的方法。

好的,我可以这样调用程序:

CALL test(@vote_value, @score, 10, 'WEEK');
SELECT @vote_value, @score;

它也可以。但请关注第三个参数10。我不想手动传递它。我希望它是查询中的值。像这样:

CALL test(@vote_value, @score, u.id, 'WEEK');
SELECT id, @vote_value, @score FROM Users u;

但它会抛出语法错误。有谁知道我怎么能做这样的事情?预期结果为this

1 个答案:

答案 0 :(得分:0)

SELECT id into @id FROM Users LIMIT 1;
CALL test(@vote_value, @score, @id, 'WEEK');

尝试以上代码。

如上所述,您可以使用 id 获取 SELECT id into @id 的值,然后使用 {{1} } 作为该查询的参数。