我想运行一个MySQL查询,然后处理所有结果集。MySQL 5.7文档指出,这样做的方法是使用SELECT ...过程stored_procedure_name(参数)。我创建了一个存储过程,它可以做我想做的事情,没有任何问题。我把它用在SELECT中...过程查询,并得到此语法错误:
ComposeStatement (标识符)在此位置无效
(其中ComposeStatement是我的存储过程的名称)。我检查了我有正确的参数数量,并且它们都是正确的类型。使用不同的过程会产生相同的错误(名称有明显的变化)。
文档中使用了一个名为ANALYSE的过程展示了这种语法的一个例子(我从另一篇文章中了解到这个过程现在已经被弃用了,但我真的不关心专门使用ANALYSE )。当我尝试这个例子时,我得到了相同的错误,并使用ANALYSE作为标识符。我得到的错误不是在过程本身,这就是为什么许多早期的帖子不适用。
有什么建议吗?SELECT..PROCEDURE构造听起来就是我所需要的。
发布于 2016-09-14 04:01:45
MySQL特性@LarryGriffith引用与存储过程无关。
它与这个被弃用的特性相关:https://dev.mysql.com/doc/refman/5.7/en/procedure-analyse.html
SELECT col1, col2 FROM table1 PROCEDURE ANALYSE(10, 2000);PROCEDURE查询修饰符的这种用法就像对查询的结果集添加了一个筛选函数。它类似于shell中的管道:
ls | grep myfile问题是,您使用的“过程”(在本例中为ANALYSE())不是可以用CREATE PROCEDURE编写的那种类型的存储过程。
您必须用C++编写过滤函数,并使用MySQL源代码对其进行编译。
ANALYZE()示例最初的目的是为了证明概念或示例,如果开发人员想要开发自己的查询过滤器,可以遵循这些示例。但我从来没有听说过有人真的创建了自己的查询过滤器。
去年宣布在MySQL 8中SELECT ... PROCEDURE ANALYZE()功能将被弃用。http://www.tocker.ca/2015/06/29/plan-to-deprecate-procedure-analyse.html
如果您需要对查询结果进行后过滤,那么编写一个脚本(用Python或您最喜欢的语言)要容易得多,它从查询结果中获取原始数据,然后对其执行所需的任何操作。
https://stackoverflow.com/questions/39477793
复制相似问题