首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么SELECT..PROCEDURE是MySQL语法错误?

问为什么SELECT..PROCEDURE是MySQL语法错误?
EN

Stack Overflow用户
提问于 2016-09-14 03:39:33
回答 1查看 484关注 0票数 1

我想运行一个MySQL查询,然后处理所有结果集。MySQL 5.7文档指出,这样做的方法是使用SELECT ...过程stored_procedure_name(参数)。我创建了一个存储过程,它可以做我想做的事情,没有任何问题。我把它用在SELECT中...过程查询,并得到此语法错误:

ComposeStatement (标识符)在此位置无效

(其中ComposeStatement是我的存储过程的名称)。我检查了我有正确的参数数量,并且它们都是正确的类型。使用不同的过程会产生相同的错误(名称有明显的变化)。

文档中使用了一个名为ANALYSE的过程展示了这种语法的一个例子(我从另一篇文章中了解到这个过程现在已经被弃用了,但我真的不关心专门使用ANALYSE )。当我尝试这个例子时,我得到了相同的错误,并使用ANALYSE作为标识符。我得到的错误不是在过程本身,这就是为什么许多早期的帖子不适用。

有什么建议吗?SELECT..PROCEDURE构造听起来就是我所需要的。

EN

回答 1

Stack Overflow用户

发布于 2016-09-14 04:01:45

MySQL特性@LarryGriffith引用与存储过程无关。

它与这个被弃用的特性相关:https://dev.mysql.com/doc/refman/5.7/en/procedure-analyse.html

代码语言:javascript
复制
SELECT col1, col2 FROM table1 PROCEDURE ANALYSE(10, 2000);

PROCEDURE查询修饰符的这种用法就像对查询的结果集添加了一个筛选函数。它类似于shell中的管道:

代码语言:javascript
复制
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或您最喜欢的语言)要容易得多,它从查询结果中获取原始数据,然后对其执行所需的任何操作。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39477793

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档