簡體   English   中英

使用 Oracle 過程插入具有特定條件的數據?

[英]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_minQtyOnHand之間的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM