2
我正在开发一个MySQL函数,该函数的功能应该是JSON_MERGE
(我的部署服务器是MySQL 5.5.51),并且我得到CONCAT
MySQL函数的空返回值。一段代码更好的解释:MySQL CONCAT返回null和两个有效字符串
IF(v_json is not null AND v_fianlJson is not null) THEN
return CONCAT(v_fianlJson, v_json);
END IF;
我不明白为什么这个concat的结果是null。你能看到我失踪的东西吗?
我正在粘贴下面的全部功能。在我的本地环境(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都是TEXT。我看到了变量名中的拼写错误,但它在所有函数中都是一样的。这不是一个错字问题。 –
我无法重现它(SQLFiddle不再功能,所以我不知道如何分享它)。我怀疑你不能用这段代码来重现它,而且这个问题只发生在你的完整函数中,因为这个错误在别的地方。我建议你只是为了调试而添加一个'ELSE'子句。 –