5

我正在尝试将嵌套集模型示例与过程一起应用。我用这种技术找到了很多,在这个过程中我发现了一个问题。每次我调用我得到的程序时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 上的警告吗?导致此类警告的过程中是否存在特殊循环?

4

2 回答 2

3

作为解决方法:尝试截断表而不是重新创建。

不要使用DROP TABLE/ CREATE TABLE。创建此表一次(或在需要时)并使用TRUNCATE TABLE命令。

于 2012-10-29T15:35:22.030 回答
2

DROP TABLE IF EXISTS tbl;当表不存在时,MySQL 会在使用时生成警告。这可能会令人困惑,甚至可能违反直觉,但这是预期的行为。

来自http://dev.mysql.com/doc/refman/5.5/en/drop-table.html

使用 IF EXISTS 可防止不存在的表发生错误。使用 IF EXISTS 时,会为每个不存在的表生成一个 NOTE。请参阅第 13.7.5.41 节,显示警告语法

IF EXISTS 防止 MySQL 抛出错误,这很好,但如果表不存在,它会导致警告。没有选项可以禁止显示此警告。

于 2013-02-14T17:58:17.320 回答