我想知道如何在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