[英]Insert data with specific condition using Oracle procedure?
我想使用 Oracle 過程將數據從視圖插入到表中。 該視圖稱為VW_INVPART
。 該視圖由來自不同表的列組成:
(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
,我們可以將數據添加到M_RequisitionLine
中的Qty
列以請求庫存。 但是在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
之間的QtyOnHand
。
我怎樣才能在oracle中制作程序? 我試過整理代碼,但仍然很困惑,因為我是 Oracle SQL 的新手。
您可以使用 case 命令以下列方式將其寫入 PL/SQL 存儲過程。 下面是非常基本的例子。 請記住,我不知道您的表的實體關系是什么,或者它們的基數是什么,所以我所做的很多事情都是基於奇異值假設的。 如果選擇數據返回多於一行,則必須使用 oracle 集合。
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;
/
此功能已存在於標准 Adempiere 中。
對於產品,在產品窗口的補貨選項卡上定義最小、最大和補貨規則。 在同一窗口的采購選項卡上,您可以為每個供應商定義最小訂單數量。
現在,如果您運行物料管理菜單下的補貨報告,您可以運行報告並生成采購訂單以根據您定義的規則完成補貨,這將遵守采購選項卡上設置的最小訂單數量,
這不是技術解決方案,但它有效。
現在,如果您的需求是比標准更復雜的履行方法,您可以定義自定義補貨規則。 這是一個簡單的 java 類,它必須實現接口 org.compiere.util.ReplenishInterface 並要求您實現一個函數……getQtyToOrder。
一旦你定義了你的類,你就在倉庫窗口中指定這個類。
現在,在產品窗口->補貨選項卡上,您可以選擇自定義作為補貨類型,該類將用於計算要補貨的數量。
這種方法會更好,因為它使您能夠使用任何受支持的數據庫而不僅僅是 Oracle。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.