查库存的 SQL 时灵时不灵,最后发现是 WHERE 里两个函数在打架
原文摘录:上周被拉去查一个库存批次接口的问题,反馈是同一段代码、同一批数据,有时候查得到有时候查不到。第一反应是连接池复用连接的时候状态没清干净,顺着这个思路查下去,发现还真跟"连接状态"有关系,只是不在连接池那层,在 SQL 自己身上。那条 SQL 的 WHERE 里塞了两个函数: f_set_batch 把当前要查的批次号记到会话里, f_get_batch 再把这个值读出来去过滤。写的人大概是想先 set 再 get ,可实测下来,这个顺序压根靠不住。