使用Oracle过程插入具有特定条件的数据?

时间:2015-09-09 11:41:40

标签: sql oracle stored-procedures adempiere

我想使用Oracle Procedure将视图中的数据插入到表中。 该视图称为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时,我们可以将数据添加到Qty中的列M_RequisitionLine,以便要求库存。但是M_RequisitionLine.Qtyorder_min)中有最小数量。

如果level_min - QtyOnHand <= Order_min,请将M_RequisitionLine.Qty设置为Order_min。 但是,如果level_min - QtyOnHand >= Order_min,则将M_RequisitionLine.Qty设置为level_minQtyOnHand之间的差异。

如何在Oracle中执行此过程?我已经尝试安排代码但仍然困惑,因为我是Oracle SQL中的新手。

1 个答案:

答案 0 :(得分:0)

您可以使用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;
/