我有一个有效的 MySQL 5.5 存储过程,它递归地调用自己。
我需要执行一个动态 sql 查询,每次调用都是唯一的,然后遍历查询中的所有值。为此,我声明了一个基于视图的游标,并在打开游标之前使用动态 SQL 创建了一个视图。我快速遍历光标,将一些信息捕获到伪数组变量中,然后关闭光标并放下视图。然后我处理在我的数组中捕获的信息,其中可能包括对同一存储过程的递归调用。
我遇到的问题是,即使每次调用过程时都会创建和删除视图,但视图定义似乎在第一次递归调用后卡住了(即视图在初始调用中创建好了,它在第一次递归调用中创建好了,但第二次递归调用中的视图与第一次递归调用中的视图相同,即使创建视图的 SQL 不同。)
每次创建视图的名称都是相同的(在 MySQL 中模拟动态 SQL 游标的一部分),并且看起来视图定义被缓存在某处并在创建时“复活”,甚至尽管 CREATE VIEW 语句每次都不同。
我知道视图正在按预期创建和删除,因为有代码可以防止同时用户无意中使用相同的公共视图-即,如果视图已经存在,则检查并延迟执行(由于缺少私有视图而导致的另一个 MySQL kludge)。
我已经能够解决 MySQL 的所有其他缺点,但是这个让我很难过。提前感谢您的任何见解/帮助!
麦克风