mysql - 如何在 MySQL 存储过程中使用 DROP TABLE IF EXISTS

标签 mysql stored-procedures

我想知道如何在 MySQL 存储过程中使用 DROP TABLE IF EXISTS。 我正在编写一个相当长的 mySQL 存储过程,它将完成大量工作,然后加载一个带有结果的临时表。但是,我无法完成这项工作。

我已经看到了几种处理临时表的方法。基本上,您要么创建临时表,对其进行处理,然后在最后删除它......或者如果它存在,则删除它,创建它,然后对其进行处理。

我更喜欢第二种方法,这样你总是从干净的开始,它是对表存在的内置检查。但是,我似乎无法让它工作:

这是我的例子:

这行得通:

DELIMITER//
    DROP PROCEDURE IF EXISTS pTest//
    CREATE PROCEDURE pTest()
    BEGIN
        CREATE TEMPORARY TABLE tblTest (
            OrderDate varchar(200)
        );
        DROP TEMPORARY TABLE tblTest;
    END//
 DELIMITER ;
CALL pTest();

这行得通:

DELIMITER//
    DROP PROCEDURE IF EXISTS pTest//
    CREATE PROCEDURE pTest()
    BEGIN
        DROP TEMPORARY TABLE tblTest;
        CREATE TEMPORARY TABLE tblTest (
            OrderDate varchar(200)
        );
    END//
 DELIMITER ;
CALL pTest();

这不是:

DELIMITER//
    DROP PROCEDURE IF EXISTS pTest//
    CREATE PROCEDURE pTest()
    BEGIN
        DROP TEMPORARY TABLE IF EXISTS tblTest;
        CREATE TEMPORARY TABLE tblTest (
            OrderDate varchar(200)
        );
    END//
 DELIMITER ;
CALL pTest();

前 2 个有效,但如果该表存在(例如过程未完成或其他情况),它显然会以“表 tblTest 不存在”错误结束。非工作示例是我正在寻找的 - 如果表在那里,则删除表,然后重新创建它,以便我可以开始清理。

感觉就像是“如果存在”让这件事失败了。我已经从各种做事非常相似的网站复制了代码,在任何情况下我都无法获得“如果存在则删除表......”来工作。永远。

开发服务器:mySQL 服务器版本:5.1.47-community 产品服务器:mySQL 服务器版本:5.0.45-log

我们无法更改数据库版本(DBA 不允许这样做),所以我只能坚持我所拥有的。这是 mySQL 还是过程中的错误?

谢谢。

最佳答案

这是一个老问题,但在我寻找 DROP TABLE IF EXISTS 时出现了。

您的无效代码无法在我的 MySQL 5.1.70 服务器上运行。

我所要做的就是在第一行的 DELIMITER 和//之间添加一个空格,一切正常。

工作代码:

DELIMITER //
    DROP PROCEDURE IF EXISTS pTest//
    CREATE PROCEDURE pTest()
    BEGIN
        DROP TEMPORARY TABLE IF EXISTS tblTest;
        CREATE TEMPORARY TABLE tblTest (
            OrderDate varchar(200)
        );
    END//
DELIMITER ;

关于mysql - 如何在 MySQL 存储过程中使用 DROP TABLE IF EXISTS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3620602/

相关文章:

MySQL JOIN 独立于 WHERE 子句

php - MYSQL 排序子串计数

postgresql - 从 DO 语句中的查询中获取结果

mysql - 如何从 MySql 中的存储过程返回表?

java - 将多个表返回到 spring jdbc 模板的存储过程

mysql - 从存储过程中选择数据

postgresql - postgresql 中的存储过程

php - mysql_connect 警告,数据库主机问题

php - 如何从具有一对一和多对关系的 3 个模型中获取数据?

mysql - MySQL 中所有公司的贸易总和 [删除]