







|
MySQL.RU - Webboard
Вернуться
Головоломка на ровном месте (Sergey) 08/09/2013 - 09:31:57
Re: Головоломка на ровном месте (Sergey) 08/09/2013 - 12:51:17
Re: Головоломка на ровном месте (Akina) 08/09/2013 - 21:58:49
> Original message text:
> From: Sergey - 08/09/2013 - 09:31:57
> Subject:Головоломка на ровном месте
> -----------------
> Прошу помощи с триггером:
>
> CREATE TRIGGER test_trigger AFTER UPDATE ON b1.t1 FOR EACH ROW
> BEGIN
> DECLARE is_end INT DEFAULT 0;
> DECLARE co_id INT;
> DECLARE b_rate FLOAT;
> DECLARE cru CURSOR FOR SELECT cid, AVG(boss) FROM b1.t1 GROUP BY cid;
> DECLARE CONTINUE HANDLER FOR NOT FOUND SET is_end = 1;
> OPEN cru;
> upc:LOOP
> FETCH cru INTO co_id, b_rate;
> IF is_end THEN LEAVE upc;
> END IF;
> UPDATE b1.t2 SET test = b_rate WHERE t2.id = co_id;
> END LOOP upc;
> CLOSE cru;
> END;
>
> Почему то не срабатывает обновление таблицы t2
> Переменные co_id и b_rate содержать нужные данные, проверил заменив UPDATE на INSERT в тестовую таблицу.
> Всё просто как лопата но не работает.
> Прошу помощи ! Спасибо.
>
From: Akina - 08/09/2013 - 21:58:49
Subject:Головоломка на ровном месте
-----------------
А можно полюбопытствовать, зачем тут вообще курсор? почему просто не выполнить двутабличный апдейт? что-то вроде
UPDATE b1.t2, (SELECT cid, AVG(boss) b_rate FROM b1.t1 GROUP BY cid) t1
SET b1.t2.test = t1.b_rate
WHERE b1.t2.id = t1.cid
Сервер выполнит связывание намного эффективнее организованного Вами последовательного перебора на курсоре...
[Это сообщение - спам!]
Последние сообщения из форума
Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL,
версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
42850
|
|