Хранимая процедура не обновляет таблицу для MySQL - PullRequest
0 голосов
/ 08 июня 2018

Запуск этой подпрограммы на HeidiSQL, и она работает с 0 затронутыми строками, даже при том, что затрагивается ровно 1 строка.оба оператора select, кажется, отлично работают вне этой хранимой процедуры.

BEGIN
    DECLARE someId INT;
    DECLARE done INT DEFAULT FALSE;
    DECLARE cur1 CURSOR FOR 
    select anotherId from tableA 
     where yetAnotherId IN(another select statement);
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;     

OPEN cur1;

    read_loop: LOOP

    IF done THEN
      LEAVE read_loop;
    END IF;

    FETCH cur1 INTO someId;

    update tableB
    set x = 'hello', y = 'world'
    where something = someId;

    END LOOP;

    CLOSE cur1;
END;

Я хотел бы получить представление о том, что может быть не так со структурой этой процедуры.Мне кажется, что даже курсор должен содержать 1 запись.

Спасибо

РЕДАКТИРОВАТЬ: похоже, 'someId' соответствует поле таблицы с тем же именем, поэтому проблема.Это было решено сейчас.

1 Ответ

0 голосов
/ 08 июня 2018

Ваш SP выглядит хорошо, я сделал изменения для MySql, пожалуйста, попробуйте

BEGIN
DECLARE someId INT;
DECLARE done INT DEFAULT FALSE;
DECLARE cur1 CURSOR FOR 
select anotherId from tableA 
where yetAnotherId IN(another select statement);
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;     

OPEN cur1;

read_loop: LOOP

FETCH cur1 INTO someId;

update tableB
set x = 'hello', y = 'world'
where something = someId;

IF done THEN

CLOSE cur1;
  LEAVE read_loop;

END IF;

END LOOP read_loop;


END;
...