你遇到过这样的情况:
在mariadb内部存储过程中,我从表中选择行,例如参数:
Table some_table
------------------
id | field1 | field2 | user | status
1 | xxx | yyy | 333 | 2
select field1 into field1_variable from some_table
where user_id=333 and status=1;
如果该查询返回null,即field1_variable为null,则执行上述查询后的任何游标都会出现如下查询:
select field1,field2 from another_table
left join some_table on another_table.user_id=some_table.user_id
where user_id=333;
不会选择任何行,因为前面带有更多参数的查询(status = 1)返回null。
至于我在外部函数中移动第一个查询一切正常。
我最好的猜测是,MariaDB 10有一些错误,它会评估一些存储过程范围查询缓存并在判断如果以前的查询包含相同的表和部分相同的搜索条件 - 返回null而不是下一个查询时不正确甚至被执行。
我非常愚蠢地写这篇文章,但是我在生产之前花了半天时间处理这个案例,如果我有时间的话我会提供可重现的那个bug的情节,如果它是bug的话。