Oracle SQL-транзакция с INSERT - PullRequest
       2

Oracle SQL-транзакция с INSERT

0 голосов
/ 08 декабря 2018

Пишу базу данных склада бакалейных товаров.У меня есть таблицы clients, workers, orders, products и некоторые, которые не очень важны в этом вопросе.

Я хочу избежать проблемы, когда клиент делает новый заказ на продукт , но его недостаточноэтого товара на нашем складе.

Я должен совершить транзакцию, чтобы избежать ситуации, когда два клиента делают новый заказ одновременно, и один из них заказал, например, последний товар, делая заказ вторымклиент.

Я действительно не знаю, как это сделать, потому что только работники могут уменьшить количество каждого продукта.Поэтому я хочу, чтобы при удалении заказа (который был сделан клиентом) работником количество доступного продукта было уменьшено.

Я знаю, что могу включить его в триггер, но вопрос:

как определить транзакцию заказа товара с проверкой доступной суммы.Стоит ли считать разницу между доступной суммой в таблице «Продукты» и количеством заказанного товара по времени (нереализованные заказы).

Как это сделать?

Ответы [ 2 ]

0 голосов
/ 09 декабря 2018

Одна вещь, которую вы можете сделать, это поместить триггер в таблицу orders, который вычитает количество из таблицы products и вызывает исключение, если сумма является отрицательной.Триггер будет иметь вид:

update products set current_quantity = current_quantity - :new.amount_purchased
 where id = :new.product_id
returning current_quantity into l_current_quantity;

if l_current_quantity < 0 then
    raise_application_error( -20001, 'Amount ordered larger than remaining quantity.' );
end if;

Вы должны обработать исключение в процедуре заказа.

0 голосов
/ 08 декабря 2018

для заказов, вы должны управлять запасами этого продукта, и каждый раз, когда кто-то собирается сделать заказ, вы должны проверять наличие продукта или нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...