2

我有一个有效的 MySQL 5.5 存储过程,它递归地调用自己。

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

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

每次创建视图的名称都是相同的(在 MySQL 中模拟动态 SQL 游标的一部分),并且看起来视图定义被缓存在某处并在创建时“复活”,甚至尽管 CREATE VIEW 语句每次都不同。

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

我已经能够解决 MySQL 的所有其他缺点,但是这个让我很难过。提前感谢您的任何见解/帮助!

麦克风

4

1 回答 1

0

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

于 2013-08-19T15:25:56.123 回答