触发减去日期

时间:2014-12-03 20:56:02

标签: sql database oracle triggers

嘿,这是学期的最后一次触发!这个对我来说很困惑。我需要为视频延迟返回的每一天(交易表)添加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:SELECT语句中应该有一个INTO子句 10/1 PL / SQL:语句被忽略
10/4 PLS-00201:标识符' NEW.DATE_RETURNED'必须声明

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:0)

尝试使用:

DATEDIFF ( datepart , startdate , enddate )

在你的例子中,它将是:

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

dd代表哪一天。