Форум: "Базы";
Текущий архив: 2002.05.09;
Скачать: [xml.tar.bz2];
ВнизНетривиальный UPDATE Найти похожие ветки
← →
sky3d (2002-04-15 11:34) [0]Здравствуйте ! Возникла необходимось обновления данных, используя SP при следующих условиях:
- Обновляем поле Produced !
- по ключевому полю Code для обновления доступна не одна, а несколько записей, т.е. значение необходимо разложить по каждой из них в соответствии со значением другого поля ( <= Planned).
условие типа WHERE CODE = 1
- какой уникальный ключ ID в момент обновления выбрать нет возможности, т.к. он неизвестен
т.е. запрос типа UPDATE .. WHERE ID = 1 отпадает
Теперь подробнее :
ID Code Planed Produced
1 1 5 0
2 1 2 0
3 1 2 0
Пусть необходимо по Сode = 1 положить значение 8 , должны получить
ID Code Planed Produced
1 1 5 5 +5 (от 8 осталось 3)
2 1 2 2 +2 (от 3 осталось 1)
3 1 2 1 +1 (значение исчерпанно )
------------------
сумма дает исходное 8
Может быть это можно сделать, использую курсоры или еще что либо ?
Надеюсь на помощь, заранее благодарен за ответы
Sky3d
← →
Mike S (2002-04-15 11:43) [1]Думаю одним курсором не отделаешься.
Нужна еще куча переменных и условий.
Не знаю, как это будет под Oracle.
← →
roottim (2002-04-15 11:57) [2]точно не проверял!... но примерно так!
procedure xxx(val integer)
is
cursor cur is
select planed,produced
from t1
order by planed desc
for update;
n integer;
begin
n:=val;
for c in cur loop
if c.planed<=n then
c.produced:=c.planed;
n:=n-c.planed;
else
c.produced:=n;
end if;
end loop;
end;
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.05.09;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.004 c