存储函数返回一个单一的标量值,它可以代表你的应用程序需要的任何东西,并且存储过程可以通过它的OUT
参数返回值,但是,对我来说更有趣和有用的是一个过程可以返回一个或多个使用过程主体中的一个或多个无界SELECT
语句将结果集传递给客户端。无界SELECT
是SELECT
不嵌套在子查询中的,不是游标声明的一部分,也不是SELECT ... INTO
语句的一部分:
MySQL 支持一个非常有用的扩展,它允许在SELECT
存储过程中使用常规语句(即,不使用游标或局部变量)。这种查询的结果集直接发送给客户端。多SELECT
条语句生成多个结果集,所以客户端必须使用支持多结果集的 MySQL 客户端库。
— http://dev.mysql.com/doc/refman/5.6/en/stored-routines-syntax.html(在所有 5.x 版本中都支持)
对于您的客户来说,这些看起来就像您发出SELECT
查询时所看到的......因此您可以返回您的应用程序可以用 JSON 包装的元素表。
或者...还有一个 MySQL 用户定义函数的 3rd 方库(服务器扩展,用 C/C++ 编写,不要与存储函数混淆),可以在服务器上生成 JSON。
https://github.com/mysqludf/lib_mysqludf_json
我会试试这个吗?是的,我会试试这个。在数据库服务器中组装 JSON 对象是最有效或最好的处理方式吗?这当然值得商榷,但我们可以整天思考和辩论这方面的理论问题,并且不会比我们开始时更接近解决方案。