2014-12-03 73 views
0

嘿傢伙在這裏學期的最後觸發!這對我來說非常困惑。我需要添加一個2美元的滯納金每一天的視頻返回晚期(事務表),那麼更新成員表中的未付餘額與滯納金。這是我到目前爲止,但它不喜歡日期減法符號。任何幫助或建議都會很好,特別是適當減去日期以獲得一個數字。觸發與減去日期

編輯:一些建議後,這是我現在我得到這些錯誤

Create or Replace Trigger Late_Rule 
BEFORE INSERT ON Transaction 
For each Row 
DECLARE 

Fee Number; 

BEGIN 

Select Date_Due, Date_Returned 
From Transaction; 

If new.Date_Returned > new.Date_Due 
THEN 
Fee := (new.Date_Returned - new.Date_Due) * 2; 


END IF; 

Update Member 
    Set Unpaid_Bal = Unpaid_Bal + Fee; 
end; 
/
show error; 

7/1 PLS-00428:INTO子句預計在SELECT語句
10/1 PL/SQL:語句被忽略
10/4 PLS-00201:標識符'NEW.DATE_RETURNED'必須聲明

回答

1

您不能將值分配給減法結果(左值) - 您需要將其分配給一個變量。

編輯:
在PL/SQL賦值運算符是:=,不=

Create or Replace Trigger Late_Rule 
BEFORE INSERT ON Transaction 
For each Row 
DECLARE 

ChargeDays Number; 
Fee Number; 

BEGIN 

If new.Date_Returned > new.Due_Date 
THEN 
Fee := (new.Date_Returned - new.Due_Date) * 2; 

ELSE 
Fee := 0 

END IF; 

Update Member 
    Where Unpaid_Bal = Unpaid_Bal + Fee; 
end; 
/
show error; 
+0

好的,謝謝我試過了,得到了這個錯誤PLS-00103:遇到以下其中一個:=時遇到符號「=」。 (@%;我繼續看它是否可以修復它 – Erica 2014-12-03 21:06:56

+0

Arg ...時髦的賦值運算符 - 請參閱我的編輯 – Mureinik 2014-12-03 21:08:41

+0

我得到3個錯誤處理END LINE/COL錯誤 15/1 PLS-00103 :當期望以下之一時遇到符號「END」:*&= - +; at in是mod餘數不是rem <指數(**)><>或!=或= => = <= <> LIKE2_ LIKE4_ LIKEC_之間|| multiset成員SUBMULTISET_符號「;」替換爲「END」以繼續 18/5 PLS-00103:遇到符號「WHERE」時遇到以下其中一個:。@分區集子分區 19/1 PLS-00103:遇到符號「END」 – Erica 2014-12-03 21:13:27

0

嘗試使用這樣的:

DATEDIFF (datepart , startdate , enddate) 

在您的例子那就是:

... 
THEN DATEDIFF (dd , new.Date_Returned , new.Due_Date) 

dd代表一天。

+0

我會在哪裏把這個將它僅僅是DATEDIFF(DD,new.Date_Returned,new.Due_Date)* 2? – Erica 2014-12-03 21:14:56

+0

可能是一個愚蠢的問題,但我要聲明DATEDIFF? – Erica 2014-12-03 21:22:56

+0

你不必聲明它,它是一個內置函數。你可以絕對做DATEDIFF(dd,new.Date_Returned,new.Due_Date)* 2 – 2014-12-03 21:51:46