在存储函数中返回数组
Posted
技术标签:
【中文标题】在存储函数中返回数组【英文标题】:Return array in stored function 【发布时间】:2011-08-18 12:32:05 【问题描述】:我试图在 mysql (5.x) 的 WHERE 语句中使用存储函数的结果,但它失败了,因为在函数中我将表中的值选择到 INT 变量中,然后返回它们/它,如果 SELECT 返回超过 1 行,这显然不起作用。我尝试返回一个 TABLE(据我所知,TABLE 在 MySQL 中表示数组),但这也没有用。
有什么办法可以让我做这样的事情:
SELECT ID FROM myTable WHERE ID IN my_function(params);
谢谢。
【问题讨论】:
【参考方案1】:这是不可能的……
首先,您不能使用存储函数来返回多个结果 - 您需要使用存储过程。
MySQL docs 状态:
返回结果集的语句可以在存储过程中使用,但不能在存储函数中使用。
其次,您不能在查询中使用存储过程 - 请参阅SO question。
您是否考虑过在查询末尾使用“HAVING ...”?
【讨论】:
好的,所以现在我有类似CREATE PROCEDURE my_proc(IN param INT, OUT result TABLE)
的东西,它也不起作用,它在 TABLE 关键字处失败
否 - 创建存储过程的语法不同。我已经修改了我的答案以提供一个例子。
是的,我也有类似的东西,但问题是,我不能在 WHERE 语句中使用它。类似SELECT * FROM cities WHERE id IN (CALL isLessThan(5))
@amaidment,我正在尝试上面的示例,但由于 CALL 语句出现错误,它失败了。你是如何让它发挥作用的?
@Cpat - 实际上,您不能在选择查询中使用存储过程。相应修改...以上是关于在存储函数中返回数组的主要内容,如果未能解决你的问题,请参考以下文章