2011-12-08 27 views
1

Dave CostaとJustin Caveからの助けを借りてhere(もう一度ありがとう)、他の2つの属性、つまりQuantityとPriceから小計を計算する方法については、小計)。その答えの1つでは、正規化の観点から、小計の値は他の2つの属性から導出でき、おそらくビューを使用して調べる必要があるため、これを行うことは好ましくありません。私はViewsを読んでコンセプトを取得していますが、私は実際には2つの値を計算し、その結果をカスタムビューで表示する方法についてまだ分かりません。誰かが正しい方向に私を指すことができたら、私はそれを感謝します。ORACLE - 2つの値を計算し、結果をビューに表示

現在のトリガー(デイブとジャスティンのクレジット):

CREATE VIEW show_subtotal 
AS SELECT price 
FROM products 
WHERE product_no =:new.product_no; 

:new.subtotal:= currentPrice *:new.quantity。

答えて

3

例えば、これは、以前のトリガーと同じようにorder_lineproductテーブルを結合することによって小計を計算します。おそらく、あなたは

CREATE OR REPLACE VIEW order_line_with_subtotal(product_no, 
               quantity, 
               price, 
               subtotal) 
AS 
SELECT ol.product_no, 
     ol.quantity, 
     p.price, 
     (ol.quantity * p.price) subtotal 
    FROM order_line ol 
     JOIN product p ON (ol.product_no = p.product_no) 

これは、トリガーベースのソリューションは、以来、持っていたのと同じデータの一貫性の問題の多くを持っている(注文番号、注文行番号などIE)いくつかの追加の属性を含めたいと思います現時点の価格はorder_lineテーブルに格納されているのではなく、productテーブルから参照されています。 order_line表は数量および現在の価格を保存するように、データ・モデルを変更した場合、それはもはやあなたが11グラムである場合productテーブル

CREATE OR REPLACE VIEW order_line_with_subtotal(product_no, 
               quantity, 
               price, 
               subtotal) 
AS 
SELECT ol.product_no, 
     ol.quantity, 
     ol.price, 
     (ol.quantity * ol.price) subtotal 
    FROM order_line ol 

に参加する必要がないだろうので、ビューには、あなたは、単純になるだろうテーブル定義に仮想列を作成することもできます。

CREATE TABLE order_line (
    order_line_no NUMBER PRIMARY KEY, 
    order_no  NUMBER REFERENCES order(order_no), 
    price   NUMBER, 
    quantity  NUMBER, 
    subtotal  NUMBER GENERATED ALWAYS AS (price*quantity) VIRTUAL 
); 
関連する問題