Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Как организовать?  [new]
benefit
Member

Откуда:
Сообщений: 4
Допустим есть таблицы

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

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

Как в oracl сделать так что бы при добавлении товара кол-во суммировалось если такой товар уже есть и отнималось если товар помещается в заказ.
12 май 18, 09:00    [21404603]     Ответить | Цитировать Сообщить модератору
 Re: Как организовать?  [new]
dmdmdm
Member

Откуда: Нижний Новгород
Сообщений: 1642
Как всегда, сумбурное описание, приходится уточнять.

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


Триггером можно. Можно в одной процедуре делать нужные операции.
12 май 18, 09:48    [21404629]     Ответить | Цитировать Сообщить модератору
 Re: Как организовать?  [new]
dmdmdm
Member

Откуда: Нижний Новгород
Сообщений: 1642
begin
  insert into Заказы ...
excption when DUP_VAL_ON_INDEX then -- unique key (заказИД, товарИД)
  update ...
end;



merge 
12 май 18, 09:51    [21404637]     Ответить | Цитировать Сообщить модератору
 Re: Как организовать?  [new]
benefit
Member

Откуда:
Сообщений: 4
Ну да ....конкретики не много в вопросе.

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

И еще сделать тоже самое только с приходом.Пришло какое-то количество товара (допустим 10 принтеров 12.05.2018), сохранилось в таблице прихода, а количество в таблице товаров (товаров было 20 а должно стать 20+10=30 ) как-то так
12 май 18, 10:14    [21404655]     Ответить | Цитировать Сообщить модератору
 Re: Как организовать?  [new]
dmdmdm
Member

Откуда: Нижний Новгород
Сообщений: 1642
Как учебную задачу можно реализовать любым из способов.
Как реальную рабочую обычно делают процедурой, в которой вся бизнес-логика в одной транзакции.
Для учета многопользовательского режима делается блокировка ключевого ресурса, в данном случае - товара.
12 май 18, 10:28    [21404670]     Ответить | Цитировать Сообщить модератору
 Re: Как организовать?  [new]
benefit
Member

Откуда:
Сообщений: 4
Ни как не могу понять как сделать процедуру чтобы при создании заказа(Sale) кол-во товара(Products) уменьшалось . и наоборот при поставке товара увеличивалось

К сообщению приложен файл. Размер - 42Kb
13 май 18, 19:30    [21406629]     Ответить | Цитировать Сообщить модератору
 Re: Как организовать?  [new]
dmdmdm
Member

Откуда: Нижний Новгород
Сообщений: 1642
Владея французско-нижегородским диалектом, понимаю, что PRIXOD - это приход, поступление товара, SALE - расход, продажа.

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

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

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;
14 май 18, 07:11    [21407004]     Ответить | Цитировать Сообщить модератору
 Re: Как организовать?  [new]
dmdmdm
Member

Откуда: Нижний Новгород
Сообщений: 1642
   merge into PRODUCTS ...


Не в PRODUCTS, конечно, в них строка уже есть, когда документ есть, а в какой-нибудь PRODUCTCARD, где остатки, цены и т.д.
14 май 18, 07:27    [21407013]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить