Вниз
Скачать: CL | DM;

Нетривиальный 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 вся ветка

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.009 c
1-26132
Anton+
2002-04-24 11:45
2002.05.09
Как кнопек закрыть (в заголовке формы) присвоить ф-цию hide?


6-26215
Beka
2002-02-24 13:57
2002.05.09
HTML вместе с Delphi


3-25975
DPetrovich
2002-03-18 14:13
2002.05.09
OLAP-клиент


1-26072
Magic
2002-04-26 10:53
2002.05.09
Формат файлов


3-26029
a_k
2002-04-16 16:31
2002.05.09
Проблемы с фильтром.




   Наверх