Несколько действий в одном запросе ORACLE

У меня есть три базы данных, подключенные удаленно через DBLink, и я хочу создать запись в трех из них. Динамика этой проблемы заключается в том, что существует компания, которая имеет 3 розничных магазина, в которых они могут продавать товары, найденные в других. Товар1 находится только в магазине розничной торговли1, товар2 - только в магазине розничной торговли2 и т. Д. Тем не менее, один магазин может продавать товары, которых в данный момент в нем нет, поэтому он должен запросить другие магазины, чтобы проверить, достаточно ли их в наличии. Каждый раз, когда один магазин продает, он создает запись в журнале, но только если он был успешным.

Эти таблицы используются в примере.

  • Магазин розничной торговли #1: Предметы (int), LOG(a int, b int, c int)
  • Розничный магазин № 2: Предметы (b int), LOG(a int, b int, c int)
  • Розничный магазин № 3: Предметы (c int), LOG(a int, b int, c int)

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

1 ответ

Похоже, что вам нужен запрос, который показывает, в каком магазине хранится товар, поэтому, когда клерк делает поиск, он отображает предмет, магазин и кол-во слева. Один из способов может использовать объединения, например, если в процедуре, в которой вы указали номер элемента (не зная, где он существует), вы бы сделали запрос следующим образом: (p_item IN NUMBER) - это параметр, переданный с требуемым номером элемента

select item1, store1, qty1, 0 item2, 0 store2, 0 qty2, 0 item3, 0 store3, 0 qty3
from store1
where item1 = p_item
union all
select 0, 0, 0, item2, store2, qty2, 0, 0, 0 
from store2
where item2 = p_item
union all
select 0, 0, 0, 0, 0, 0, item3, store3, qty3 
from store3
where item3 = p_item

это должно вернуть только 1 строку со значениями, отличными от 0, и скажет вам, где она находится.

Обновление может затем использовать оператор if или оператор case для обновления соответствующего хранилища в зависимости от того, в какой комбинации предмет / магазин оно было найдено.

Другие вопросы по тегам