Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
14-26265
Феликс
2002-04-01 23:40
2002.05.09
В поисках кулибы!


1-26100
AlexT1000
2002-04-26 17:50
2002.05.09
Печать битмапа в реальном размере..


14-26260
alienb
2002-04-02 17:58
2002.05.09
Как определить имя хоста по IP?


1-26193
Freek
2002-04-25 15:46
2002.05.09
Как найти файл в реестре?


1-26051
Freek
2002-04-25 15:47
2002.05.09
Как нажать на кнопку?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский