我想知道如何在MySQL存储过程中使用DROP TABLE IF EXISTS
。 我正在写一个相当长的mySQL存储过程,将做一堆的工作,然后加载一个临时表与结果。但是,我无法完成这项工作。如何在MySQL存储过程中使用DROP TABLE IF EXTERNTS
我见过几种方法来做临时表的事情。基本上,您可以创建临时表,对其进行处理,然后将其放在最后......如果存在,则创建它,然后在其上进行工作。
我更喜欢第二种方法,以便始终保持清洁,并且它是对表格存在的内置检查。不过,我似乎无法得到它的工作:
这里是我的例子:
这个工程:
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不存在”错误结束。非工作的例子就是我正在寻找的东西 - 把它放在那里,然后重新创建它,这样我就可以开始清理了。
感觉就像是“IF EXISTS”使这件事情失败。我已经复制了各种类似网站的代码,并且在任何情况下都无法获得“DROP TABLE IF EXISTS ...”的效果。永远。
开发服务器:MySQL服务器版本:5.1.47社区 PROD服务器:MySQL服务器版本:5.0.45日志
我们不能改变数据库的版本(数据库管理员不会允许它),这样我被困在我所拥有的东西上。这是一个在MySQL或程序中的错误?
谢谢。
我也许应该已经发布了实际的错误,我得到的... [错误] 1064 - 你有一个错误的SQL语法;检查与您的MySQL服务器版本相对应的手册,以在'// DELIMITER; 第7行的CALL pTest()' 简单地删除“IF EXISTS”消除了错误,整个proc工作(当然,除非该表不存在;) – 2010-09-02 15:15:38