2013-07-17 4 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 (первичный ключ). Остальные всегда имеют NULL.

С кодом что-то не так?

ответ

4

Вы просматривали временную таблицу, чтобы узнать, какие данные задерживаются в ней? Временная таблица будет по-прежнему присутствовать после завершения процедуры, и если вы снова запустите процедуру из того же сеанса, вы будете записывать новые строки в существующую временную таблицу.

Я бы добавил DROP TEMPORARY TABLE IF EXISTS tmp до CREATE TEMPORARY TABLE ..., чтобы убедиться, что у вас нет старых данных.

Смежные вопросы