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;