【发布时间】:2013-02-05 03:01:00
【问题描述】:
我有以下 MYSQL 存储过程,
CREATE PROCEDURE DWH.product_stats(OUT int_return INT)
BEGIN
DECLARE vc_sku,
vc_prod_id VARCHAR(100);
DECLARE int_views,
int_fav,
int_month,
int_year,
not_found INT DEFAULT 0;
DECLARE cur_sku CURSOR FOR
SELECT product_id, sku FROM product LIMIT 0,10;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET not_found = 1;
OPEN cur_sku;
REPEAT
FETCH cur_sku INTO vc_prod_id, vc_sku;
IF NOT not_found THEN
-- Number of Views and Favs
SELECT COUNT(CASE WHEN event_type_id = 1 THEN 1 END) AS views,
COUNT(CASE WHEN event_type_id = 5 THEN 1 END) AS favs,
MONTH(logged_at) AS log_mon,
YEAR(logged_at) AS log_year INTO int_views, int_fav, int_month, int_year
FROM report_event
WHERE object_id = vc_prod_id
GROUP BY log_mon, log_year
ORDER BY log_year, log_mon;
-- DEBUG
SELECT vc_sku, vc_prod_id, int_views, int_fav, int_month, int_year ;
END IF;
UNTIL not_found END REPEAT ;
CLOSE cur_sku;
END;
如果我正常运行,没有错误。我得到结果。但我在 MYSQL 存储过程中使用它。然后,当我尝试运行存储过程时,它给了我这个错误,说“结果由多行组成”。 这是因为我有一个针对月份和年份的 GROUP BY,它将为一个产品生成多个记录。但这就是我想要的功能。 处理此问题的最佳方法是什么?
【问题讨论】:
-
你在什么样的程序中运行它?你想从SP返回什么?这个代码单独在一个过程中就可以了。
-
好的,我刚刚添加了完整的 SP。我将把这个 SQL 的输出写到一个临时表中
-
您缺少提供 SP 名称、它接受的参数以及它返回的内容的声明部分。我认为,这三项中至少一项对您的问题很重要。
-
目前真的不需要任何参数,我有一个返回参数只是为了拥有一个,它真的没有任何作用,无论如何我已经添加了SP创建部分也是