2012-03-03 15 views
1

執行以下存儲過程時,出現「未知表'matched_temp'」等錯誤。將數據備份到另一個表中

DELIMITER $$ 

DROP PROCEDURE IF EXISTS `apms`.`sp_partition_parkinout` $$ 
CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_partition_parkinout`() 
BEGIN 

DROP TEMPORARY TABLE IF EXISTS MATCHED_TEMP; 

CREATE TEMPORARY TABLE MATCHED_TEMP AS 
    SELECT ID FROM CARDINOUT 
    WHERE (`State` = 2) AND 
     (ID NOT IN (SELECT ID FROM CARDINOUT_MATCHED)) 
    LIMIT 200; 

INSERT INTO CARDINOUT_MATCHED 
SELECT * FROM CARDINOUT 
WHERE ID IN (SELECT ID FROM MATCHED_TEMP); 

DELETE FROM CARDINOUT 
WHERE ID IN (SELECT ID FROM MATCHED_TEMP); 

END $$ 

DELIMITER ; 

我想定期執行它以將cardinout中的數據移入cardinout_matched。將cardinout保留爲儘可能小的目的,因爲cardinout經常被查詢。

有沒有其他的選擇來完成這個?

感謝 Botem

+0

我使用MySQL連接器6.2.2網絡。每當我收到錯誤如「超時過期,操作完成之前超時時間或服務器沒有響應」。我手動執行存儲過程,並得到像「未知表'matched_temp'」的錯誤。 – 2012-03-03 03:59:54

回答

1
CREATE TEMPORARY TABLE MATCHED_TEMP (
    ID INT 
); 
INSERT INTO MATCHED_TEMP 
SELECT ID FROM CARDINOUT 
(...) 
+0

MATCHED_TEMP應該存在,因爲必須有一些記錄需要移動到matched_temp表中。無論如何,我按照你的建議修改了我的代碼,現在我正在測試它。 – 2012-03-03 04:04:38

相關問題