如何在插入记录时根据其他表中的字段计算字段(在过程中)

时间:2016-12-31 22:22:56

标签: plsql

我很抱歉这个混乱的标题,但找不到另一种方式来问它。

假设我想写一个程序add_salesline。我输入了带参数的所有字段,subtotal除外。小计(只是销售线的价格)需要根据其他表格中的字段计算,例如表productprice中的products,表pricereduction中的promotion等。(基于属性)。

我该怎么做?我一直试图解决这个问题好一周,而且它只是不起作用......

1 个答案:

答案 0 :(得分:0)

据推测,传递给程序add_salesline()的参数之一是productid,或其他任何参数。因此,您可以使用它来选择products.productpricepromotion.pricereduction以及执行计算所需的任何其他内容。

编写存储过程的目的是将多个调用关联到一个程序单元中。所以add_salesline()可能看起来像这样(很多警告,因为你的问题在细节上非常清楚):

create or replace procedure add_salesline(
  p_orderno in salesline.orderno%type
  , p_salesqty in salesline.salesqty%type
  , p_productid in products.productid%type
)
is
    new_rec salesline%rowtype;
begin
    new_rec.orderno := p_orderno;
    new_rec.salesqty := p_salesqty;
    new_rec.productid := p_productid;

    select p_salesqty * (p.productprice * nvl(pp.pricereduction, 1))
    into new_rec.subtotal 
    from products p
        left outer join promotion pp
        on pp.productid = p.productid
    where p.productid = p_productid
    ;

    insert into salesline
    value new_rec;

end;

此代码假定pricereduction是一个费率。如果该值是绝对折扣,则公式将不同(p.productprice - nvl(pp.pricereduction, 0))。或者,如果它是重置价格:coalesce(pp.pricereduction, p.productprice)