我有这个存储过程:
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_value
和score
都有OUT
方向(结果),而user_id
和time_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。
答案 0 :(得分:0)
SELECT id into @id FROM Users LIMIT 1;
CALL test(@vote_value, @score, @id, 'WEEK');
尝试以上代码。
如上所述,您可以使用 id
获取 SELECT id into @id
的值,然后使用 {{1} } 作为该查询的参数。