【问题标题】:Same Select statement inside procedure returns all rows过程中的相同 Select 语句返回所有行
【发布时间】:2015-09-14 20:30:02
【问题描述】:

我有这个选择语句,我想从 mysql 的存储过程中调用它。它从一个只有三行三列的表中调用它。

SELECT RefsArray FROM C where InstaId like 'whatever'

当我在它自己的查询窗口中调用它时,它只会返回一个正确的值。

但是当我把它放在存储过程中时,无论多么复杂或简单,它总是会返回所有三行。

以下是一些截图: 使用过程:

选择语句:

这非常令人抓狂,因为我几乎尝试了所有方法: 索引,重做整个表,使 where 子句更小,使用临时表然后在过程中查询它,使其休眠直到 select 语句完成,将类型更改为 mediumtext、double、int。

它适用于其他表和列,但它只是这一列,我需要,它不会适用。

我有一种感觉,这是因为它正在寻找的 instaId 太长,但我没有在任何地方读到它会影响过程中的查询。我能做些什么来解决这个问题?我需要它来处理这些 ID!

仅供参考,这里是整个 C 表。

【问题讨论】:

    标签: mysql stored-procedures


    【解决方案1】:

    我想我已经明白了。我将列名从 InstaID 更改为 yID 之类的短名称,现在由于某种原因它可以工作了。

    这背后有文献吗???

    编辑

    下面的好心人帮我弄清楚这是因为我的参数与我的列名相同。 mysql不区分大小写。

    【讨论】:

    • 据我所知没有限制,当然不会那么低。那么问题就变成了,您将存储过程的参数定义为什么?我猜[VAR]CHAR([<19])
    • 好吧,既然我找到了解决方案,我使用的是标准 varchar(255),实际上我应该使用 varchar(29),因为 InstaID(现在的 yID)中的标准字符串应该是 19 位数字_10 位数字。 varchar 并不是我认为的限制因素(这就是我在图片中只使用 19 位数字的原因)。这整个事情太奇怪了,你可以试试看,如果你有同样的问题,请告诉我?
    • 你可能想发布存储过程的CREATE;你不应该对 VARCHAR(255) 有问题,所以可能会出现其他问题。
    • @Uueerdo 你说得对,不是 varchar,而是列名长度。
    • 哦,哦!可能是因为您的参数名称与字段名称匹配! (如果忽略大小写)dev.mysql.com/doc/refman/5.0/en/… 'A' like '%A%' 始终为真。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-27
    • 2014-01-01
    • 1970-01-01
    • 2016-07-02
    • 1970-01-01
    相关资源
    最近更新 更多