2013-04-03 3 views
0

я пытаюсь сделать этоMySQL CONCAT - в пользовательской функции - не работает

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 в курсоре, как и ожидалось.

Как мне выполнить конкатенацию?

ответ

0

Функция CONCAT() возвращает NULL, если какой-либо из его аргументов NULL. Попробуйте

DECLARE ids text DEFAULT ''; 

, который удостоверится, что первый вызов CONCAT не имеет аргументов NULL.

0

Вместо создания функции, выше, может просто быть сделано в запросе в качестве

SELECT group_concat(entity_id) FROM sales_flat_order WHERE total_due = 0.01; 
+0

Да, действительно, но я хотел понять этот конкретный случай .. – Michael

Смежные вопросы