MySQL процедура с курсором не работает должным образом

0

У меня есть prosedure, который, судя по обновлению некоторой информации. в таблице, но. его выполнение. некоторые это сочтет неправильными и нет. обновление. мой. Таблица

CREATE DEFINER='andrey.'@'ip' PROCEDURE 'sp_visits'()
BEGIN

  DECLARE cursor_VAL VARCHAR(255);
  DECLARE done INT DEFAULT FALSE;
  DECLARE min_date DATETIME DEFAULT FALSE;
  DECLARE max_visits INT DEFAULT FALSE;
  DECLARE cursor_i CURSOR FOR SELECT hash_id FROM .ANDREY;
  DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

  OPEN cursor_i;
  read_loop: LOOP
    FETCH cursor_i INTO  cursor_VAL;
    IF done THEN
      LEAVE read_loop;
    END IF;

   select @max_visits := max(visits)
    from ANDREY where hash_id = cursor_VAL ;

    select @min_date :=min(date(transaction_ts)) 
    from ANDREY where hash_id = cursor_VAL and visits =@max_visits;

   update ANDREYt 
   set visits = @max_visits+1
   where hash_id = cursor_VAL  and date(transaction_ts) between date(@min_date) and DATE(@min_date) + INTERVAL 7 DAY;

  END LOOP;
  CLOSE cursor_i;
END

когда я запускаю его из workbench, вместо того чтобы запускать его, возвратите мне несколько записей # @min_date: = min (date (transaction_ts)) 2018-07-20

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

с этим курсором я пытаюсь решить эту проблему

Теги:
cursor

1 ответ

1
Лучший ответ

Когда вы делаете такие вещи, как:

select @max_visits := max(visits)
from ANDREY where hash_id = cursor_VAL ;

в процедуре результат этого запроса возвращается в результате процедуры. Вы можете решить эту проблему, используя SELECT INTO:

SELECT MAX(visits) INTO @max_visits
FROM ANDREY where hash_id = cursor_VAL ;

SELECT MIN(DATE(transaction_ts) INTO @min_date
FROM ANDREY where hash_id = cursor_VAL AND visits = @max_visits;
  • 0
    Спасибо ! Я не знал эту разницу между SQL-сервером и Mysql :) узнать что-то новое сегодня :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню