2014-12-03 152 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