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

时间:2014-10-30 15:19:09

标签: mysql database stored-procedures

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

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

Table 'db.testtable' doesn't exist

我已将存储过程删除到以下代码,但它不起作用。我总是在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调试存储过程。

1 个答案:

答案 0 :(得分:0)

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

mysql> USE `test`;
Database changed

mysql> SELECT VERSION();
+-----------------+
| VERSION()       |
+-----------------+
| 5.5.22-0ubuntu1 |
+-----------------+
1 row in set (0.00 sec)

mysql> DELIMITER //

mysql> DROP PROCEDURE IF EXISTS `insert_record`//
Query OK, 0 rows affected (0.00 sec)

mysql> CREATE PROCEDURE `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`;
    ->   SELECT `code`;
    -> END//
Query OK, 0 rows affected (0.01 sec)

mysql> CALL `insert_record`(NULL, NULL)//
+--------+
| `code` |
+--------+
| TEST   |
+--------+
1 row in set (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

SQL Fiddle demo