2015-09-09 3 views
-2

Я хочу вставить данные из представления в таблицу с помощью Oracle Procedure. Вид называется VW_INVPART. Вид состоит из колонки из различных таблиц:Вставить данные с определенным условием с помощью процедуры Oracle?

(M_Product table) 
AD_ORG_ID, 
AD_Client_ID, 
Name, 
M_Product_ID, 

(M_Storage table) 
QtyOnHand, 

(M_Replenish table) 
level_min 

(M_Product_PO table) 
order_min 

таблицы Я хочу, чтобы вставить это M_RequisitionLine.

Мой сценарий есть количество товаров, определенное в QtyOnHand. QtyOnHand является динамическим, поэтому его можно изменить, зависит от процесса входа в систему. то есть минимальный уровень, который определен в level_min. Когда товар заканчивается, мы можем заказать его снова, и количество минимального заказа указано в order_min.

Таким образом, когда количество QtyOnHand является менееlevel_min, мы можем добавить данные в столбце Qty в M_RequisitionLine, чтобы запросить запас. Но есть минимальное количество, которое нужно положить в M_RequisitionLine.Qty (order_min).

Если level_min - QtyOnHand <= Order_min, а затем установить M_RequisitionLine.Qty в Order_min. Но, если level_min - QtyOnHand >= Order_min, тогда установите M_RequisitionLine.Qty в разницу между level_min и QtyOnHand.

Как я могу сделать процедуру в Oracle? Я попытался упорядочить код, но все еще запутался, поскольку я новичок в Oracle SQL.

+0

см. [Это] (http://www.techonthenet.com/oracle/loops/if_then.php) и [это] (http://stackoverflow.com/questions/19833642/if-else-condition-in -sql-store-procedure) для добавления условий в хранимые процедуры оракула. – learningNew

+0

Звучит так, как вам может понадобиться [max] (http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions085.htm). – Anders

ответ

0

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

Declare 
    t M_Storage.QtyOnHand%TYPE; 
    v M_Replenish.Level_min%TYPE; 
    o M_Product_PO.order_min%TYPE; 

Begin 
SELECT QtyOnHand INTO t FROM M_Storage; 
SELECT Level_min INTO v FROM M_Replenish; 
SELECT Order_min INTO o FROM M_Product_PO; 

CASE 
    When t-v < o Then UPDATE M_RequisitionLine set qty = o; 
    When t-v >= o then UPDATE M_RequisitionLine set qty = t-v; 
END CASE; 
END; 
/
0

Эта функциональность уже существует в стандартном Adempiere.

Для продукта, определите мин, макс & ПОПОЛНЕНИЕ правила на вкладке Пополнять из окна продукта. На вкладке «Закупки» того же окна вы можете определить для каждого Поставщика Минимальный заказ Кол-во.

Теперь, если вы запустите Восполнение отчетпод меню Материал управления, вы можете запустить отчет и генерировать Заказы выполнить пополнение на основе правил, которые определены и это будет честь установить количество минимального заказа на Закладка для закупок,

Это не техническое решение, но оно работает.

Теперь, если ваши потребности были еще более сложным методом выполнения, в стандарте вы могли бы определить пользовательское правило пополнения. Это простой класс Java, который должен реализовать интерфейс org.compiere.util.ReplenishInterface и требует, чтобы вы реализовали одну функцию ... getQtyToOrder.

Как только вы определили свой класс, вы укажете этот класс на окне Warehouse.

Теперь на продукт window-> вкладка Пополнять можно выбрать Выборочная как Пополнять Тип и этот класс будет использоваться для расчета количества пополнения.

Этот подход будет лучше, поскольку он поддерживает вашу способность использовать любую поддерживаемую базу данных, а не только Oracle.