2013-07-17 84 views
1

我想創建一個臨時表並從中選擇結果,在一個mysql過程中。MySQL過程臨時表選擇

這裏的一個片的SQL

DELIMITER $$ 

CREATE PROCEDURE `mydb`.`simulate_results` (currdate DATETIME, enddate DATETIME, idcam INT) 
BEGIN 

DECLARE MYVAR1, 
     MYVAR2, 
     MYVAR3, 
     IDX INT; 

CREATE TEMPORARY TABLE IF NOT EXISTS tmp (
    `Id` INT NOT NULL AUTO_INCREMENT, 
    `Field1` INT NOT NULL, 
    `Field2` INT NOT NULL, 
    `Field3` INT NOT NULL, PRIMARY KEY (`Id`)) ENGINE=MEMORY; 

INSERT INTO tmp (`Field1`,`Field2`,`Field3`) VALUES (0,0,0); 
INSERT INTO tmp (`Field1`,`Field2`,`Field3`) VALUES (1,0,0); 



SELECT Field1,Field2,Field3,Id INTO MYVAR1,MYVAR2,MYVAR3,IDXFROM tmp ORDER BY RAND() LIMIT 1; 


     SELECT MYVAR1; (...) 

即來自SELECT INTO statemente填充是IDX(主鍵)的唯一變量。其他人總是空的。

這段代碼有什麼問題嗎?

回答

4

你看過你的臨時表,看看它裏面留着什麼樣的數據?過程完成後臨時表仍然存在,並且如果從同一個會話中再次運行該過程,則會將新行寫入現有臨時表。

我會在CREATE TEMPORARY TABLE ...之前加DROP TEMPORARY TABLE IF EXISTS tmp,以確保您沒有舊數據。