MySQL中未找到存储过程中的临时表

MySQL中未找到存储过程中的临时表,mysql,database,stored-procedures,Mysql,Database,Stored Procedures,我继承了一些使用存储过程的代码,其中一个似乎无法正常工作 存储过程使用临时表在过程的后面插入数据。但是,当我执行存储过程时,不会插入任何数据。当我调试它时,我得到一个错误: 表“db.testtable”不存在 我已将存储过程精简为以下代码,但它不起作用。我总是在SELECT语句中得到错误。从我所看到的例子来看,一切都很好 DROP PROCEDURE IF EXISTS db.insert_record; CREATE PROCEDURE db.`insert_record`(id int,

我继承了一些使用存储过程的代码,其中一个似乎无法正常工作

存储过程使用临时表在过程的后面插入数据。但是,当我执行存储过程时,不会插入任何数据。当我调试它时,我得到一个错误:

表“db.testtable”不存在

我已将存储过程精简为以下代码,但它不起作用。我总是在SELECT语句中得到错误。从我所看到的例子来看,一切都很好

DROP PROCEDURE IF EXISTS db.insert_record;
CREATE PROCEDURE db.`insert_record`(id int, status int)
BEGIN
    DECLARE code varchar(45);

    DROP TEMPORARY TABLE IF EXISTS testTable;

    CREATE TEMPORARY TABLE testTable AS (SELECT 'TEST' AS fakeColumn);

    SELECT fakeColumn INTO code FROM testTable;
END;
我还验证了我连接的用户是否具有创建临时表的权限;事实上,它拥有所有可用的权限

其他细节

在Windows上运行MySQL 5.6

如果我自己使用drop/create/select语句并作为脚本运行,它的行为与预期的一样


使用Toad for MySQL调试存储过程。

我无法重现该问题。您还可以提供哪些其他信息

mysql>使用'test'; 数据库已更改 mysql>选择版本; +---------+ |版本| +---------+ |5.5.22-0ubuntu1| +---------+ 设置为1行0.00秒 mysql>分隔符// mysql>删除过程(如果存在)`insert_记录`// 查询确定,0行受影响0.00秒 mysql>创建过程'insert_record``id`int,`status`int ->开始 ->声明'code`VARCHAR45; ->如果存在“testTable”,则删除临时表; ->创建临时表'testTable'作为'fakeColumn'选择'TEST'作为'fakeColumn'; ->从“testTable”中将“fakeColumn”选择为“code”; ->选择“代码”; ->结束// 查询正常,0行受影响0.01秒 mysql>调用`insert_record`NULL,NULL// +----+ |‘代码’| +----+ |试验| +----+ 设置为1行0.00秒 查询确定,0行受影响0.00秒
事实证明,这个问题不是代码问题,而是工具问题。我在整个存储过程中添加了select语句,它从临时表返回结果。出于某种原因,Toad For MySQL无法处理临时表的调试。一旦我确定了这一点,我发现存储过程的insert语句中有一个问题。我们在相同的环境中也会遇到同样的错误。在我们的例子中,这并不是每次都是这样,有时它工作,有时它给出的错误表“table_name”不存在。在我们的sp中,我们在适当的位置删除和创建临时表,这在以前的mysql版本5.5中是有效的,并且这个sp在循环中被多次调用。