Выборка MySQL следующая проблема курсора

У меня есть проблема при выборке значений от курсора MySQL.

Я составляю временную таблицу, которая является простой копией другой таблицы (исходная таблица имеет имя переменной, это передается как параметр процедуры, и потому что MySQL не поддерживает названия таблицы переменных, я должен создать копию - не может использовать оригинал непосредственно).

Создание временной таблицы идет очень хорошо, все данные, которые, как предполагается, находятся в нем, там. Затем я определяю курсор для итерации через мою временную таблицу..., но когда я пытаюсь выбрать от курсора в, некоторое время циклично выполняются, мои переменные не заполнены данными из "cursored" таблицы... большинство из них является просто ПУСТЫМ, только длится 2, кажется, имеют правильные значения внутри.

Вот блок моего кода:

-- variables to be filled from the cursor
DECLARE id,rain,snow,hs,clouds,rain2,cape,status,done int;
DECLARE v_v,v_u double;

-- cursor declaration
DECLARE iter CURSOR FOR (SELECT id,cape,rain,snow,hstones,clouds,raining,wind_u,wind_v FROM temp_tbl);
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;

-- drop the old temporary table if any
DROP TABLE IF EXISTS temp_tbl;

-- a statement to create the temporary table from a table with the specified name
-- (table_name is a parameter of the stored procedure this chunk is from)

SET @temp_table = CONCAT('CREATE TABLE temp_tbl AS SELECT * FROM ', table_name, ' WHERE 1'); 

-- prepare, execute and deallocate the statement
PREPARE ctmp FROM @temp_table;
EXECUTE ctmp;
DEALLOCATE PREPARE ctmp;

-- now the temp_table exists, open the cursor
OPEN iter;

WHILE NOT done DO

        -- fetch the values
        FETCH iter INTO id,cape,rain,snow,hs,clouds,rain2,v_u,v_v;

        -- fetch doesnt work, only v_u and v_v variables are fetched correctly, others are null

        -- ... further statements go here

END WHILE;

CLOSE iter;

Действительно ли там кто-либо - проверка типа в операторе FETCH, который мог бы вызвать такую проблему? Столбцы в моей временной таблице (который получен из исходного) являются просто маленькими-ints или крошечными-ints, таким образом, они должны быть совершенно совместимы с ints, я использую в операторе выборки. Те два последних, удваивается, но странный, что только эти два удваивается, выбираются. Даже идентификационный столбец интервала, который является первичным ключом, не выбирается.

Я работаю с dbForge Studio, чтобы ступить в и отладить мои процедуры, но это не должно быть проблемой.

7
задан Smita Ahinave 29 March 2016 в 10:39
поделиться

1 ответ

В функциях MySQL, когда имена параметров или переменных конфликтуют с именами полей, используются имена параметров или переменных.

В этих утверждениях:

DECLARE id,rain,snow,hs,clouds,rain2,cape,status,done int;

DECLARE iter CURSOR FOR (SELECT id,cape,rain,snow,hstones,clouds,raining,wind_u,wind_v FROM temp_tbl);

вы выбираете неинициализированные переменные, а не поля. Это то же самое, что сделать:

DECLARE iter CURSOR FOR (SELECT NULL, NULL, NULL, NULL, NULL, NULL, NULL, wind_u,wind_v FROM temp_tbl);

Последние два имени полей не конфликтуют и выбираются правильно.

Перед именами переменных ставится знак подчеркивания:

DECLARE _id, _rain, _snow, _hs, _clouds, _rain2, _cape, _status, _done INT;
16
ответ дан 6 December 2019 в 12:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: