我想使用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.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 :(得分: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;
/