Переименуйте ваши переменные и входной параметр, они неоднозначны.
Этот запрос:
SELECT body, created, anonymous, screen_name
FROM idiscussion
LEFT JOIN
users
ON idiscussion.uid = users.id
WHERE idiscussion.iask_id = iask_id
возвращает ранее объявленные вами переменные (которые NULL
), а не столбцы таблицы.
Добавьте имена переменных и имя входного параметра с подчеркиванием.
Также вы делаете дополнительное присваивание результата:
FETCH cur1 INTO body, created, anonymous, screen_name;
SET result = CONCAT(result,'<comment><body><![CDATA[',body,']]></body>','<replier>',if(screen_name is not null and !anonymous,screen_name,''),'</replier>','<created>',created,'</created></comment>');
Обработчик устанавливает done
после сбоя FETCH
, но, тем не менее, result
назначается.
Измените ваш обработчик на:
DECLARE EXIT HANDLER FOR SQLSTATE '02000' RETURN result;
Наконец: в MySQL
это можно сделать одним запросом. Нет необходимости делать это с помощью функции.
SELECT GROUP_CONCAT(CONCAT(result,'<comment><body><![CDATA[',body,']]></body>','<replier>',if(screen_name is not null and !anonymous,screen_name,''),'</replier>','<created>',created,'</created></comment>') SEPARATOR '')
FROM idiscussion
LEFT JOIN
users
ON idiscussion.uid=users.id
WHERE idiscussion.iask_id = @_iask_id