例えば、これは、以前のトリガーと同じようにorder_line
とproduct
テーブルを結合することによって小計を計算します。おそらく、あなたは
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
);