我继承了一些使用存储过程的代码,其中一个代码似乎无法正常工作。
存储过程使用临时表在稍后的过程中插入数据。但是,当我执行存储过程时,不会插入任何数据。当我调试它时,我收到错误:
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调试存储过程。
答案 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)