SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 22.04.2013 17:09:05

dvorkot
Участник
Зарегистрирован: 22.04.2013
Сообщений: 1

странно работает FETCH .. INTO в процедуре

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

Помогите, пожалуйста, разобраться

Код процедуры:


BEGIN

DECLARE vId INT(24);
DECLARE vParentId INT(24);
DECLARE vName VARCHAR(255);
DECLARE vRetail INT(24);
DECLARE vUnit VARCHAR(50);
DECLARE vBalance INT(11);

DECLARE resultCount INT DEFAULT 0;

DECLARE a INT DEFAULT 0;
DECLARE cur_temp CURSOR FOR SELECT `id`, `parent_id`, `name`, `retail`, `unit`, `balance` FROM `catalog_items_temp` WHERE 1;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET a = 1;

UPDATE `catalog_items` SET `is_delete` = 1;

OPEN cur_temp;

WHILE 0 = a DO
    FETCH cur_temp INTO vId, vParentId, vName, vRetail, vUnit, vBalance;
    SELECT COUNT(*) INTO resultCount FROM `catalog_items` WHERE `id` = vId;
    IF 1 = resultCount THEN
        UPDATE `catalog_items` SET `parent_id` = vParentId, `name` = vName, `retail` = vRetail, `unit` = vUnit, `balance` = vBalance WHERE `id` = id;
    ELSE
        INSERT INTO `catalog_items` (`id`, `parent_id`, `name`, `retail`, `unit`, `balance`) VALUES (vId, vParentId, vName, vRetail, vUnit, vBalance);
    END IF;
END WHILE;

CLOSE cur_temp;
END
 

Неактивен

 

#2 24.04.2013 12:09:03

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: странно работает FETCH .. INTO в процедуре

UPDATE `catalog_items` SET `parent_id` = vParentId, `name` = vName, `retail` = vRetail, `unit` = vUnit, `balance` = vBalance WHERE `id` = id;

вероятно нужно
WHERE `id` = vId;

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson