所以我试图为学校项目创建一个功能,这个功能背后的想法是从食谱数据库中提取所有成分。当我使用我创建的函数时,MySQL错误状态1415不允许从函数返回结果集。这是我的代码。
DELIMITER ??
DROP FUNCTION IF EXISTS fxn_get_ingredients??
CREATE FUNCTION fxn_get_ingredients (ingredientList VARCHAR (100))
RETURNS VARCHAR (100) DETERMINISTIC
BEGIN
SELECT
i.ingredientName AS 'Ingredient Name'
FROM ingredients i
INNER JOIN recipe_ingredients ri ON i.ingredientID=ri.ingredientID
INNER JOIN recipes r ON ri.recipeID=r.recipeID
WHERE r.recipeTitle = ingredientlist;
END ??
DELIMITER ;
我不确定此错误的含义或如何解决问题。任何帮助将不胜感激。
答案 0 :(得分:0)
您需要create a procedure
instead of a function
。函数不能返回多行。
如果需要使用函数,可以查看特定于mysql的SQL扩展GROUP_CONCAT。如果您制定SQL查询以便结果在一个组中,则可以使用此函数将每个结果行的字符串添加到一起。
答案 1 :(得分:0)
Table valued function
中没有 MySQL
;所以你不能从函数中返回一个表,而是选择使用一个perocedure。另一种选择如下
DELIMITER ??
DROP FUNCTION IF EXISTS fxn_get_ingredients??
CREATE FUNCTION fxn_get_ingredients (ingredientList VARCHAR (100))
RETURNS tinyint(1)
BEGIN
DECLARE result INT DEFAULT 0;
CREATE TABLE temp_table(ingredientName varchar(100));
INSERT INTO temp_table
SELECT
i.ingredientName AS 'Ingredient Name'
FROM ingredients i
INNER JOIN recipe_ingredients ri ON i.ingredientID=ri.ingredientID
INNER JOIN recipes r ON ri.recipeID=r.recipeID
WHERE r.recipeTitle = ingredientlist;
SET result = 1;
RETURN result ;
END ??
DELIMITER ;
调用该函数然后可以执行select * from temp_table;