带有游标和 View 的 MySQL 递归存储过程不刷新

标签 mysql stored-procedures view recursion dynamic-sql

我有一个可以递归调用自身的有效 MySQL 5.5 存储过程。

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

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

View 的名称在每次创建时都是相同的(在 MySQL 中模拟动态 SQL 游标的一部分),看起来好像 View 定义被缓存在某个地方并在它正在被“复活”时已创建,即使 CREATE VIEW 语句每次都不同。

我知道 View 正在按预期创建和删除,因为有代码可以防止同时用户无意中使用相同的公共(public) View - 即如果 View 已经存在则检查并延迟执行(另一个 MySQL 缺少私有(private) View 的问题).

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

迈克

最佳答案

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

关于带有游标和 View 的 MySQL 递归存储过程不刷新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14641955/

相关文章:

mysql - 条件棘手的多对多mysql

mysql - 将Foxpro程序转换为MySQL存储过程

java - 如何在 Android 方法中初始化 View ?

mysql - 无法创建存储过程

Django 测试返回 _wrapped_view 作为 View 名称而不是正确的 View 名称

android - 缩放动画的问题

PHP 内存限制在正常的 PHP 脚本中不生效

mysql - 匹配..反对

php - 如何在 mysql 中连接 4 个表以获取同一个 html 表上的不同列数据?

c# - sqlDecimal 到十进制 clr 存储过程无法将类型 'System.Data.SqlTypes.SqlDecimal' 的对象转换为类型 'System.IConvertible'