おそらくプロシージャadd_salesline()
に渡されるパラメータの1つはproductid
、または何でもある。したがって、SELECT products.productprice
、promotion.pricereduction
などを使用して計算を実行する必要があれば、それを使用します。
ストアドプロシージャを作成する目的は、複数の呼び出しを1つのプログラム単位に関連付けることです。 (あなたの質問は細部に非常に軽いですので、警告がたくさん)だから、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)
。
出典
2017-01-01 12:51:58
APC
ありがとうございました。私は質問が明確ではないことを申し訳なく思っています。私はそれを書いたときに本当に疲れました。 – Ortix