【发布时间】:2018-04-26 14:11:14
【问题描述】:
我正在尝试为一个类创建一个触发器,该触发器根据商品退回的延迟天数或提前天数更新客户余额。我有一个包含到期日期和返回日期的章程表,触发器设计为仅在更新返回日期时触发。然后触发器获取返回日期和到期日期之间的差异,并将该值存储到变量中。我有一系列 if else 语句来确定该项目是迟到还是早退,然后将天数乘以滞纳金或早期奖金。然后它将客户表中的客户余额更新为费用变量的值。 Oracle 说我的 end 语句有语法错误,我不确定是什么问题。
CREATE OR REPLACE TRIGGER Fee_Trigger
AFTER UPDATE ON CHARTER
FOR EACH ROW
WHEN ((:NEW.Return_Date <> :OLD.Return_Date AND :NEW.Return_Date IS NOT
NULL))
DECLARE
Fee NUMBER;
BEGIN
Fee := (:NEW.Return_Date - Due_Date);
IF Fee > 0 THEN Fee := (Fee * 75) ;
ELSE IF Fee < 0 THEN Fee := (Fee * 25);
ELSE IF Fee = 0 THEN FEE := Fee;
END IF;
UPDATE CUSTOMER
SET Customer_Balance = Fee
WHERE CustomerID = :NEW.CustomerID
END;
【问题讨论】:
-
UPDATE 语句不以分号结尾。
-
您的代码在幼稚的阅读中毫无意义。两个日期之间的差异将是一个间隔类型。将区间类型分配给名为
customer_balance的列是非常可疑的。
标签: sql oracle plsql database-trigger