テーブルからTrgDisAmount
読み取りPROD_NAME
、およびの値で挿入された新しい行ごとにテーブルのおよびを計算するトリガーを作成しようとしています。PRICE
PRODUCT
DISCOUNT
AMOUNT
SALES
SERIAL
PCODE
これらはテーブル情報です
Table SALES (SERIAL, PCODE, PROD_NAME, PRICE, DISCOUNT, AMOUNT)
Table PRODUCT (PCODE, PROD_NAME, PROD_CAT, PRICE)
Table DISCOUNT (PROD_CAT, DISCOUNT_RATE)
ノート:
SERIAL
およびのみの値を入力しますPCODE
。残りの列は、トリガーによってTrgDisAmount
のみ入力する必要がありますDISCOUNT_RATE
using Function を取得しGetDiscount
ます。
tableGetDiscount
から取得する関数を既に作成しています。DISCOUNT_RATE
DISCOUNT
これは私の試みです:
create or replace trigger TrgDisAmount
before insert on SALES for each row
begin
if :new.PCODE = :old.PRODUCT.PCODE then
:new.PROD_NAME := :old.PRODUCT.PROD_NAME;
:new.PRICE := :old.PRODUCT.PRICE;
:new.DISCOUNT := :old.product.PRICE / (GetDiscount(:old.PRODUCT.PROD_CAT));
:new.AMOUNT := :new.PRICE - :new.DISCOUNT;
end if;
insert into SALES columns (PROD_NAME, PRICE, DISCOUNT, AMOUNT)
values (:new.PROD_NAME, :new.PRICE, :new.DISCOUNT, :new.AMOUNT);
end;
/
そのブロックを実行すると、次のエラーが表示されます。
PLS-00049: bad bind variable 'OLD.PRODUCT'
Table_Name.Column_name
特定の列に到達するために使用します。それを行うことは合法ですか?
サンプル出力は次のようになります。
SQL> insert into sales values (1,'MB-101',null, null, null, null);
Result in SALES table:
SERIAL : 1,
PCODE : MB-101,
PROD_NAME : IPHONE 6+,
PRICE : 250 ,
DISCOUNT : 25,
AMOUNT : 225