有一个功能的问题

时间:2015-07-04 20:09:49

标签: mysql sql function

所以我试图为学校项目创建一个功能,这个功能背后的想法是从食谱数据库中提取所有成分。当我使用我创建的函数时,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 ;

我不确定此错误的含义或如何解决问题。任何帮助将不胜感激。

2 个答案:

答案 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;