在存储函数中返回数组

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 - 实际上,您不能在选择查询中使用存储过程。相应修改...

以上是关于在存储函数中返回数组的主要内容,如果未能解决你的问题,请参考以下文章

通过数据库链接在 oracle 中调用存储函数(返回用户定义类型的数组)

从指向函数指针数组的指针中存储返回值如何工作?

如何从函数返回数据类型 int** 并存储它?

C语言中函数调用怎么返回两个值

mysql中怎么存储数组?在线等!急!

c语言动态数组如何扩充空间