【发布时间】:2017-02-05 12:21:27
【问题描述】:
我正在开发一个 MySQL 函数,该函数应该作为 JSON_MERGE(我的部署服务器是 MySQL 5.5.51),我从 CONCAT MySQL 函数得到一个空返回。一段代码更好地解释:
IF(v_json is not null AND v_fianlJson is not null) THEN
return CONCAT(v_fianlJson, v_json);
END IF;
我不明白为什么这个 concat 的结果为空。你能看到我错过了什么吗?
我将粘贴到完整功能下方。在我的本地环境(MySQL 5.5.42)中,这个函数可以工作,使用相同的数据。
USE `o2stag`;
DROP function IF EXISTS `getApplicationData`;
DELIMITER $$
USE `stag`$$
CREATE DEFINER=`root`@`localhost` FUNCTION `getApplicationData`(pApplication_id INT) RETURNS text CHARSET latin1
BEGIN
DECLARE v_id INT DEFAULT NULL;
DECLARE v_json TEXT DEFAULT NULL;
DECLARE v_finalJson TEXT DEFAULT NULL;
SELECT
id, data INTO v_id, v_json
FROM application_data
WHERE application_id = pApplication_id ORDER BY id LIMIT 1;
WHILE (v_id is not null) DO
IF(v_finalJson is null AND v_json is not null) THEN
SET v_finalJson = v_json;
ELSE
IF(v_finalJson is not null AND v_json is not null) THEN
SET v_finalJson = CONCAT(CONCAT(LEFT(v_finalJson, CHAR_LENGTH(v_finalJson) -1), ''),',', SUBSTRING(v_json, 2));
END IF;
END IF;
#---------------------------------------------------------------
# Just to control the logic cursor
IF(SELECT 1=1 FROM application_data WHERE application_id = pApplication_id AND id > v_id ORDER BY id LIMIT 1) THEN
SELECT id, data INTO v_id, v_json FROM application_data
WHERE application_id = pApplication_id
AND id > v_id ORDER BY id LIMIT 1;
ELSE
SET v_id = null;
SET v_json = '';
END IF;
END WHILE;
RETURN v_finalJson;
END$$
DELIMITER ;
感谢您的帮助
【问题讨论】:
-
所涉及的变量的具体数据类型是什么?
-
@ÁlvaroGonzález 都是文本。我在变量名中看到了拼写错误,但在所有函数中都是一样的。这不是错字问题。
-
我无法复制它(SQLFiddle 不再起作用,所以我不知道如何分享它)。我怀疑您也无法使用那段代码重现它,并且该问题仅发生在您的完整功能中,因为错误在其他地方。我建议你添加一个
ELSE子句只是为了调试。
标签: mysql string-concatenation