MySQL错误-";不允许从函数返回结果集";
这是我的数据库类。我的教授想让我们做一个存储函数。这是一个具体的问题 请基于来宾表编写名为fHW2_4_XXXX(…)的存储函数。您的程序应该有一个参数,并且应该满足以下3个测试用例 我意识到也有类似的问题,但我看到的那些问题没有帮助。我试图在MySQL中创建一个存储函数,但它给了我一个错误: “不允许从函数返回结果集。” 目标是从dreamhome.Guest中选择所有guestname,其地址包含给定(输入)城市名称,但必须返回值“John Kay,Mike Ritchie”。这是我的数据库类。我知道这与我的SELECT语句有关,但我看不到其他可靠的方法来做这件事。多亏了,我已经找到了答案 因此,我发现解决这个问题的最好方法是声明一个游标,并遍历搜索结果 这是我的代码:MySQL错误-";不允许从函数返回结果集";,mysql,function,Mysql,Function,这是我的数据库类。我的教授想让我们做一个存储函数。这是一个具体的问题 请基于来宾表编写名为fHW2_4_XXXX(…)的存储函数。您的程序应该有一个参数,并且应该满足以下3个测试用例 我意识到也有类似的问题,但我看到的那些问题没有帮助。我试图在MySQL中创建一个存储函数,但它给了我一个错误: “不允许从函数返回结果集。” 目标是从dreamhome.Guest中选择所有guestname,其地址包含给定(输入)城市名称,但必须返回值“John Kay,Mike Ritchie”。这是我的数据
如果要返回结果集,请创建一个存储过程或视图,而不是函数。@Sloachrisher这就是问题所在。我的教授希望它是一个存储函数,然后不要返回结果集。您应该已经了解了结果集是什么,以及它与课堂上的值之间的区别。提示:不返回名称,但使用for next循环将列值存储到VARCHAR(255)中。错误信息也是这样。习惯吧。如果你想成为一名程序员,你必须学会自学。我已经编程40年了,花了大约1/3的时间学习新东西——这只是为了跟上时代。我从来没有上过课,但总是在那些有学位的同事周围兜圈子,主要是因为我可以自学。(顺便说一句,我的学位是在一个不相关的领域——核物理)快速搜索找到了关于这个主题的100多页,大约有10页是正确的。
DELIMITER //
CREATE FUNCTION fHW2_4_xxxx(city_name VARCHAR(25))
RETURNS VARCHAR(255)
BEGIN
DECLARE names VARCHAR(255);
IF (city_name = '' OR city_name IS NULL) THEN
SELECT 'Please input a valid city.' AS message;
ELSE
SELECT GROUP_CONCAT(guestname SEPARATOR ',') INTO names FROM dreamhome.Guest WHERE guestaddress LIKE CONCAT('%', city_name, '%');
RETURN names;
END IF;
END //
DELIMITER ;
--Function fHW2_4_xxxx--
DELIMITER //
DROP FUNCTION IF EXISTS fHW2_4_xxxx //
CREATE FUNCTION fHW2_4_yamakait(city_name VARCHAR(25))
RETURNS VARCHAR(2000)
BEGIN
DECLARE v_finished INTEGER DEFAULT 0;
DECLARE v_name varchar(100) DEFAULT "";
DECLARE name_list varchar(2000) DEFAULT "";
-- declare cursor for guest name
DEClARE name_cursor CURSOR FOR
SELECT guestname FROM dreamhome.Guest WHERE guestaddress LIKE CONCAT('%', city_name, '%');
-- declare NOT FOUND handler
DECLARE CONTINUE HANDLER
FOR NOT FOUND SET v_finished = 1;
IF (city_name != '' AND city_name IS NOT NULL) THEN
OPEN name_cursor;
get_name: LOOP
FETCH name_cursor INTO v_name;
IF (v_finished = 1 AND name_list = "") THEN
RETURN 'No result found.';
LEAVE get_name;
END IF;
IF v_finished = 1 THEN
LEAVE get_name;
END IF;
-- build name list
IF (name_list = "") THEN
SET name_list = v_name;
ELSE
SET name_list = CONCAT(name_list, "," , v_name);
END IF;
END LOOP get_name;
RETURN name_list;
CLOSE name_cursor;
ELSE
RETURN 'Please input a valid city.';
END IF;
END //
DELIMITER ;