2014-10-16 3 views
0

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

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

  • розничный магазин # 1: Детали (а целое), LOG (а INT, б INT, с INT)
  • розничный магазин # 2: Детали (б целое), LOG (а INT, б INT, с ИНТ)
  • розничный магазин # 3: элементы (с ИНТ), LOG (а ИНТ, б ИНТ, с Int)

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

+0

Примечание. Если вы знаете, как сделать подход, пожалуйста, помогите мне. Это не обязательно должен быть полный ответ с использованием требуемого синтаксиса. Просто идеи. Спасибо. – ditmark12

+1

У меня возникли проблемы с пониманием вашей точной проблемы, а также с вашей схемой. Если вы хотите получить ответ, вам нужно будет решить этот вопрос. Некоторые рекомендации: какую версию Oracle вы используете? Как вы проверяете, есть ли товар на складе (в таблице Items, которую вы описываете, недостаточно информации). Какова цель таблицы LOG - почему есть три столбца? Вам нужно показать пример потока данных. В отсутствие всего этого прочитайте двухфазные записи (http://docs.oracle.com/cd/B19306_01/server.102/b14231/ds_txnman.htm) –

ответ

0

Похоже на то, что вы хотите, это запрос, который показывает, в каком магазине хранится предмет, поэтому, когда клерк выполняет поиск, он показывает элемент, хранилище и количество слева. Один из способов может использовать союзы, так что если процедура, в которой вы передали номер элемента (не зная, где он существует), вы бы запросили вот так: (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, и сообщит вам, где она находится.

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