私はしばらくの間、このトリガーを実装しようとしていて、進歩を遂げています (と思います!) が、現在、ミューテーション エラーが発生しています。
ここにあるのは、Customer_Order (合計など)、Order_Line (数量、小計など)、Products (在庫、価格) の 3 つのエンティティ (ここで関連) です。Order_line はリンク エンティティであるため、製品は多数の order_lines に含めることができ、customer_order には多数の order_lines を含めることができますが、order_line は注文で 1 回しか表示できず、1 つの製品しか含めることができません。トリガーの目的は、order_line (または実際には製品の価格) から小計を取得し、order_line から数量を乗算して、新しい order_line の小計を更新することです。
したがって、製品の外部キー、数量 3、価格 4.00 を使用して order_line を挿入すると、トリガーは 2 つを乗算して 12 にし、小計を更新します。ここで、変異エラーを修正するために、Order_line の小計の代わりにここで price を使用するのが正しいと考えています (トリガーステートメントによってアクセスされているテーブルを更新するようトリガーに要求しているために発生しますよね?)。数量の問題を解決できますか? 数量は常に在庫と同じ値になるとは限りません。在庫以下でなければならないので、製品から選択してorder_lineを更新するためにこれを修正する方法を知っている人はいますか? ありがとう。
CREATE OR REPLACE TRIGGER create_subtotal
BEFORE INSERT OR UPDATE ON Order_Line
for each row
DECLARE
currentSubTotal order_line.subtotal%type;
currentQuantity order_line.quantity%type;
BEGIN
select order_line.subtotal,order_line.quantity
into currentSubTotal,currentQuantity
from order_line
where product_no = :new.product_no;
IF (currentquantity>-1 ) then
update order_line set subtotal= currentSubTotal * currentQuantity where line_no=:new.line_no;
END IF;
END;
.
run
編集: :new 構文を使用して、トリガーステートメントからの数量値を使用できると思います。これを試してみますが、確認とサポートに感謝します。ありがとうございます。