powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как организовать?
8 сообщений из 8, страница 1 из 1
Как организовать?
    #39643519
benefit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Допустим есть таблицы

Товары:
ТоварИД pk
Название Товара
Кол-во Товара

Заказы:
ЗаказИД
Заказчик
тТоварыИД fk

Как в oracl сделать так что бы при добавлении товара кол-во суммировалось если такой товар уже есть и отнималось если товар помещается в заказ.
...
Рейтинг: 0 / 0
Как организовать?
    #39643525
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как всегда, сумбурное описание, приходится уточнять.

benefitпри добавлении товара в заказ кол-во в заказе? суммировалось, если такой товар уже есть в заказе?, и отнималось из кол-ва заказа?, если товар помещается удаляется в заказ из заказа.

Триггером можно. Можно в одной процедуре делать нужные операции.
...
Рейтинг: 0 / 0
Как организовать?
    #39643528
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
2.
3.
4.
5.
begin
  insert into Заказы ...
excption when DUP_VAL_ON_INDEX then -- unique key (заказИД, товарИД)
  update ...
end;




Код: plsql
1.
merge 
...
Рейтинг: 0 / 0
Как организовать?
    #39643531
benefit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну да ....конкретики не много в вопросе.

Суть такова .
В заказе будет указываться просто кол-во товара и дата заказа (допустим 10 принтеров купили 12.05.2018 ) для покупки, а у же это кол-во должно вычитаться с общего количества данного товара на складе (На складе было 20 а должно стать 20-10=10.)

И еще сделать тоже самое только с приходом.Пришло какое-то количество товара (допустим 10 принтеров 12.05.2018), сохранилось в таблице прихода, а количество в таблице товаров (товаров было 20 а должно стать 20+10=30 ) как-то так
...
Рейтинг: 0 / 0
Как организовать?
    #39643532
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как учебную задачу можно реализовать любым из способов.
Как реальную рабочую обычно делают процедурой, в которой вся бизнес-логика в одной транзакции.
Для учета многопользовательского режима делается блокировка ключевого ресурса, в данном случае - товара.
...
Рейтинг: 0 / 0
Как организовать?
    #39643981
benefit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ни как не могу понять как сделать процедуру чтобы при создании заказа(Sale) кол-во товара(Products) уменьшалось . и наоборот при поставке товара увеличивалось
...
Рейтинг: 0 / 0
Как организовать?
    #39644113
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владея французско-нижегородским диалектом, понимаю, что PRIXOD - это приход, поступление товара, SALE - расход, продажа.

Правильнее стремиться к нормализации данных, создать таблицу "документы", и, точнее, "шапка документа" HEAD и "спецификация документа" SPC.

И тогда в процедуре утверждения документа делаем

Код: plsql
1.
2.
3.
4.
5.
6.
7.
i number;

update HEAD set STATUS = 1 where ID = p_id_head;
for S in (select PRODUCTID, QTY from SPC where ID_HEAD = p_id_head) loop
   select ID_PRODUCT into i from PRODUCT_LOCK where PRODUCTID = S.PRODUCTID for update;
   merge into PRODUCTS P ... using ( ... ) NEWP on (P.PRODUCTID = NEWP.PRODUCTID)  when not matched then insert ... when matched then update set QTY = QTY - NEWP.QTY;
end loop;
...
Рейтинг: 0 / 0
Как организовать?
    #39644119
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
   merge into PRODUCTS ...



Не в PRODUCTS, конечно, в них строка уже есть, когда документ есть, а в какой-нибудь PRODUCTCARD, где остатки, цены и т.д.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как организовать?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]