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

Plsql 插入记录(在过程中)时,如何根据其他表中的字段计算字段,plsql,Plsql,很抱歉,这个标题让人困惑,但我找不到另一种方式来问它 假设我想写一个过程add\u salesline。我输入所有带参数的字段,除了小计。小计(仅销售线的价格)需要根据其他表格中的字段进行计算,如表格产品中的产品价格,促销中的降价等(基于属性) 我该怎么做?我已经尝试解决这个问题好一周了,但它不起作用…可能传递给过程add\u salesline()的参数之一是productid,或者其他什么。因此,您可以使用它来选择products.productprice、promotion.pricere

很抱歉,这个标题让人困惑,但我找不到另一种方式来问它

假设我想写一个过程
add\u salesline
。我输入所有带参数的字段,除了
小计
。小计(仅销售线的价格)需要根据其他表格中的字段进行计算,如表格
产品
中的
产品价格
促销
中的
降价
等(基于属性)


我该怎么做?我已经尝试解决这个问题好一周了,但它不起作用…

可能传递给过程
add\u salesline()
的参数之一是
productid
,或者其他什么。因此,您可以使用它来选择
products.productprice
promotion.pricereduction
以及执行计算所需的任何其他内容

编写存储过程的目的是将多个调用关联到单个程序单元中。因此,
add_salesline()
可能看起来像这样(有很多注意事项,因为您的问题非常简单):


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

谢谢,这确实有帮助。我很抱歉这个问题不清楚,我写的时候真的很累。
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;