Как организовать храним. проц. с циклом, в запросы которой подставляются значения полей

Илья55
Дата: 15.02.2013 19:39:48
Я новичек по хранимым процедурам, пока разбираюсь...

Есть таблица table1:
|date |name1 |name2 |sum1|sum2|znach1|znach2|
|2013-02-11|Пупкин |Иванов|23 |44 | | |
|2013-02_11|Сидоров|Петров|45 |35 | | |
|2013-02_11|...... |...... |.... |.... | | |

Есть два запроса(update) которые расчитывают и записывают значения в поле znach1 и поле znach2:
update table1
set znach1=(select avg(sum1) from
(SELECT sum1, date FROM table1
where name1='Пупкин'
order by date desc limit 5) as sum1)
where name1='Пупкин' and date='2013-02-11'

update table1
set znach2=(select avg(sum2) from
(SELECT sum2, date FROM table1
where name2='Иванов'
order by date desc limit 5) as sum2)
where name2='Иванов' and date='2013-02-11'

Как организовать хранимую процедуру с циклом, которая проходилась бы по всем записям из table1(с конкретной датой) и выполняла 2 запроса(update) на конкретную дату(например 2013-02-01), при этом значения полей: name1 и name2 менялись в цикле и подставлялись в запросы(update)?
romy4
Дата: 15.02.2013 19:41:39
Илья55,

через prepared statement
пора уже валить с работы, пятнецо же!
Илья55
Дата: 18.02.2013 12:03:11
Вот как получилось:

drop procedure if exists `znach`;
delimiter //
create procedure znach (in gdate date)
	not deterministic
	modifies sql data
	sql security definer
begin
  declare name11 varchar(45);
  declare name22 varchar(45);
  declare done int default 0 ;
  declare cur1 cursor for select name1,name2 from table1 where date=gdate 
  declare continue handler for not found set done = 1;
  open cur1;
  while not done do
   fetch cur1 into name11,name22;
   update table1 
		set znach1=(select avg(sum1) from
		(select sum1, date from table1
		where name1=name11
		order by date desc limit 5) as sum1)
   where name1=name11 and date=gdate;
   update table1 
		set znach2=(select avg(sum2) from
		(select sum2, date from table1
		where name2=name22
		order by date desc limit 5) as sum2)
   where name2=name22 and date=gdate;
  end while;
  close cur1;
end //
delimiter ;