SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 06.04.2013 14:21:20

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

Хранимые процедуры и курсоры

Здравствуйте!

Внутри итераций курсора я использую конструкцию IF, чтоб выбирать нужные мне значения. Если я сразу делаю SELECT всех переменных то запрос возвращает только одно, первое значение. Как мне сохранить эти данные в какую нибудь переменную и вернуть их по заверщении процедуры?

SQL процедуры:

DELIMITER //
CREATE PROCEDURE `getActivity`(IN leftVar INT, IN rightVar INT)
BEGIN
    DECLARE activityID INTEGER;
    DECLARE userID INTEGER;
    DECLARE countSteps INTEGER;
    DECLARE date INTEGER;
    DECLARE global_steps INTEGER DEFAULT 0;
    DECLARE done INTEGER DEFAULT 0;
   
    DECLARE ActivityCursor CURSOR FOR
    SELECT
        a.id,
        a.user_id,
        a.count_steps,
        a.date
    FROM
        `activity` AS a
    ORDER BY count_steps;
       
    DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done=1;
   
    OPEN ActivityCursor;
    WHILE done = 0 DO
        FETCH ActivityCursor INTO activityID, userID, countSteps, date;
        SET global_steps = global_steps + countSteps;
        IF global_steps > leftVar AND  global_steps <= rightVar THEN
            SELECT activityID, userID, countSteps, date, global_steps;
        END IF;
       
        IF global_steps > rightVar THEN
            SET done = 1;
        END IF;
    END WHILE;
    CLOSE ActivityCursor;
   
       
END //

Отредактированно Manson (06.04.2013 14:27:42)

Неактивен

 

#2 06.04.2013 16:37:01

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

Re: Хранимые процедуры и курсоры

Можно использовать временную таблицу.

Есть подозрение, что данную задачу можно решить одним запросом.

select t.*, @global_steps from
(SELECT
        a.id,
        a.user_id,
        a.count_steps,
        a.date
    FROM
        `activity` AS a
    ORDER BY count_steps) t, (select @global_steps:=0) t1
where @global_steps > leftVar AND  @global_steps <= rightVar;

Неактивен

 

Board footer

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