MySQL自定义函数能否实现单次调用返回多列数据?
问题描述
我编写了如下MySQL自定义函数:
DELIMITER // CREATE FUNCTION retur1(NR int) RETURNS INT DETERMINISTIC BEGIN DECLARE ManagerList VARCHAR(50); SELECT CodP INTO ManagerList FROM FPa WHERE ID = NR; RETURN ManagerList; END; // DELIMITER ;
该函数可正常提取表中的整数数据,无运行问题。我想了解是否能通过单次调用提取两列数据,例如同时获取名称列(如Name列)与整数列(如CodP列),得到类似|Name | Integer|格式的结果,请问是否有可行方法?
可行解决方案
MySQL的标量自定义函数仅支持返回单个值,要一次性获取多列数据,可采用以下几种实用方案:
1. 使用存储过程
存储过程支持定义多个输出参数,能直接返回多列数据:
DELIMITER // CREATE PROCEDURE get_two_columns(NR INT, OUT out_name VARCHAR(50), OUT out_codp INT) DETERMINISTIC BEGIN SELECT Name, CodP INTO out_name, out_codp FROM FPa WHERE ID = NR; END; // DELIMITER ;
调用示例:
SET @name = ''; SET @codp = 0; CALL get_two_columns(123, @name, @codp); SELECT @name AS Name, @codp AS Integer;
2. 返回JSON格式字符串
若偏好使用函数而非存储过程,可让函数返回包含多列数据的JSON字符串,后续在查询中解析:
DELIMITER // CREATE FUNCTION get_two_columns_json(NR INT) RETURNS JSON DETERMINISTIC BEGIN RETURN (SELECT JSON_OBJECT('Name', Name, 'Integer', CodP) FROM FPa WHERE ID = NR); END; // DELIMITER ;
调用并解析(MySQL 8.0+推荐用JSON_VALUE):
SELECT JSON_VALUE(get_two_columns_json(123), '$.Name') AS Name, JSON_VALUE(get_two_columns_json(123), '$.Integer') AS Integer;
3. 使用表值函数(MySQL 8.0.19+)
MySQL 8.0.19及以上版本支持返回表的函数,可直接输出多列结果集:
DELIMITER // CREATE FUNCTION get_two_columns_table(NR INT) RETURNS TABLE(Name VARCHAR(50), `Integer` INT) DETERMINISTIC BEGIN RETURN (SELECT Name, CodP AS `Integer` FROM FPa WHERE ID = NR); END; // DELIMITER ;
调用示例:
SELECT * FROM get_two_columns_table(123);
内容的提问来源于stack exchange,提问作者Andy
相关产品推荐
相关产品推荐

