带游标的MySQL递归存储过程&;视图不刷新

带游标的MySQL递归存储过程&;视图不刷新,mysql,stored-procedures,view,recursion,dynamic-sql,Mysql,Stored Procedures,View,Recursion,Dynamic Sql,我有一个可以工作的MySQL 5.5存储过程,它递归地调用自己 我需要在每次调用中执行唯一的动态sql查询,然后循环查询中的所有值。为此,我声明了一个基于视图的游标,并在打开游标之前使用动态SQL创建了一个视图。我快速循环遍历光标,将一些信息捕获到伪数组变量中,然后关闭光标并删除视图。然后处理数组中捕获的信息,其中可能包括对同一存储过程的递归调用 我遇到的问题是,尽管每次调用过程时都会创建和删除视图,但在第一次递归调用之后,视图定义似乎会卡住(即,视图在初始调用中创建为Ok,在第一次递归调用中创

我有一个可以工作的MySQL 5.5存储过程,它递归地调用自己

我需要在每次调用中执行唯一的动态sql查询,然后循环查询中的所有值。为此,我声明了一个基于视图的游标,并在打开游标之前使用动态SQL创建了一个视图。我快速循环遍历光标,将一些信息捕获到伪数组变量中,然后关闭光标并删除视图。然后处理数组中捕获的信息,其中可能包括对同一存储过程的递归调用

我遇到的问题是,尽管每次调用过程时都会创建和删除视图,但在第一次递归调用之后,视图定义似乎会卡住(即,视图在初始调用中创建为Ok,在第一次递归调用中创建为Ok,但第二次递归调用中的视图与第一次递归调用中的视图相同,即使创建视图的SQL不同。)

每次创建视图时,视图的名称都是相同的(这是在MySQL中模拟动态SQL游标的一部分),并且似乎视图定义被缓存在某个地方,并且在创建时“重新恢复”,即使每次的CREATE view语句都不同

我知道视图正在按预期创建和删除,因为有代码可以防止同时使用同一公共视图的用户无意中使用该视图——即,如果视图已经存在,则检查并延迟执行(另一个MySQL因缺少私有视图而造成的混乱)

我已经能够克服MySQL的所有其他缺点,但这一点让我感到困惑。提前感谢您的任何见解/帮助


Mike

似乎这可能与事务隔离有关-您是否在事务内部执行此操作,是否在删除后提交,是否启用了自动提交,等等?

次要更新:我编写了另一个存储过程,它使用相同的视图/游标来允许动态SQL,但此例程不使用递归,即它表现出同样的问题:视图返回以前的结果,即使它被删除并使用不同的SELECT语句重新创建。例程在创建视图之前检查并延迟视图是否存在,因此不能锁定已删除的内容,对吗?!??