2016-12-31 12 views
-1

紛らわしいタイトルのために申し訳ありませんが、別の方法で求めることはできません。レコードを挿入中に他のテーブルのフィールドに基づいてフィールドを計算するにはどうすればいいですか(プロシージャ内)

たとえば、手順add_saleslineを書きたいとしましょう。 subtotalを除くすべてのフィールドにパラメータを入力します。テーブルpromotionなどのテーブルproductspricereductionproductpriceなどの他のテーブルのフィールドに基づいて小計(販売ラインの単価)を計算する必要があります(プロパティに基づいて)。

どうすればいいですか?私は良い一週間のこの問題を解決しようとしていた、そしてそれはちょうど働いていない...

答えて

0

おそらくプロシージャadd_salesline()に渡されるパラメータの1つはproductid、または何でもある。したがって、SELECT products.productpricepromotion.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)

+0

ありがとうございました。私は質問が明確ではないことを申し訳なく思っています。私はそれを書いたときに本当に疲れました。 – Ortix

関連する問題