我試圖創建觸發器TrgDisAmount
從PRODUCT
表中讀取PROD_NAME
和PRICE
並計算SALES
表的DISCOUNT
和AMOUNT
對於插入的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
使用功能GetDiscount
。
我已經創建GetDiscount
功能從表DISCOUNT
得到DISCOUNT_RATE
。
這是我的嘗試:
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
什麼是你的代碼的問題,使用的?它會產生錯誤嗎?它做錯了什麼嗎? –
當我運行該塊它告訴我錯誤說:PLS-00049:壞綁定變量'OLD.PRODUCT'@GordonLinoff – user125150
正確這些錯誤是 - 1.Remove:OLD 2.正確調用您的函數,並3.刪除INSERT INTO子句。對於插入觸發器之前,INSERT語句不是必需的,當條件匹配時,會自動插入一行。下面的代碼片段@ user125150 –