0

我试着这样做

CREATE FUNCTION getOneCentOrderIds (s text) RETURNS text
BEGIN
    DECLARE no_more_orders, ent_id INT default 0;
    DECLARE ids text;
    DECLARE orders_cur CURSOR FOR SELECT entity_id FROM sales_flat_order WHERE total_due = 0.01;
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_orders = 1;
    OPEN orders_cur;
        FETCH NEXT FROM orders_cur INTO ent_id;
        REPEAT
            SET ids = CONCAT(ids, ', ', ent_id);
            FETCH orders_cur INTO ent_id;
        UNTIL no_more_orders END REPEAT;
    CLOSE orders_cur;
    RETURN ids;
END$

但是当我执行该函数时我得到空值。

如果我只是删除 concat 并离开,SET ids = ent_id我会得到光标中的最后一个 id,如预期的那样。

我应该如何进行连接?

4

2 回答 2

0

上面可以简单地在查询中完成,而不是创建函数

SELECT group_concat(entity_id) FROM sales_flat_order WHERE total_due = 0.01;
于 2013-04-03T14:40:42.960 回答
0

如果任何参数为 NULL,则 concat() 函数将返回 NULL。尝试

DECLARE ids text DEFAULT '';

这将确保对 CONCAT 的第一次调用没有 NULL 参数。

于 2013-04-03T14:45:13.780 回答