我正在尝试应用一个带有过程的嵌套set模型示例。我发现了许多使用这种技术的人,在这个过程中我发现了一个问题。每次我调用这个过程时,我都会得到unknown table XXX。当我创建这个过程时,我一点问题都没有。下面是一个快速示例:
CREATE PROCEDURE `sp_getRoleTree` (IN root INT)
READS SQL DATA
BEGIN
DECLARE rows SMALLINT DEFAULT 0;
DROP TABLE IF EXISTS ROLE_TREE;
CREATE TABLE ROLE_TREE (
nodeID INT PRIMARY KEY
) ENGINE=HEAP;
INSERT INTO ROLE_TREE VALUES (root);
SELECT * FROM ROLE_TREE;
DROP TABLE ROLE_TREE;
END;所以我的问题是,我在这里做错了什么(这是示例代码),如果代码没有问题,我可以禁用if exists上的警告吗?过程中有没有一个特殊的循环导致了这类警告?
发布于 2012-10-29 23:35:22
变通办法:尝试截断表,而不是重新创建。
请勿使用DROP TABLE/CREATE TABLE。只需创建一次该表(或在需要时),然后使用TRUNCATE TABLE命令。
发布于 2013-02-15 01:58:17
如果表不存在,则在使用DROP TABLE IF EXISTS tbl;时,MySQL会生成警告。这可能会令人困惑,而且可能有悖于直觉,但这是预期的行为。
来自http://dev.mysql.com/doc/refman/5.5/en/drop-table.html
使用IF EXISTS防止不存在的表发生错误。当使用IF EXISTS时,会为每个不存在的表生成一个注释。请参阅第13.7.5.41节,SHOW WARNINGS Syntax。
IF exist可以防止MySQL抛出错误,这很好,但是如果表不存在,它会发出警告。不存在取消显示此警告的选项。
https://stackoverflow.com/questions/13123527
复制相似问题