SQL Developer触发器

时间:2015-02-23 01:22:55

标签: sql oracle-sqldeveloper

我没有想法解决这个问题。我正在做一个家庭作业,我无法弄清楚如何检查是否返回 - duedate> 12小时

P.S。我添加了使用时间的偏好。

这是问题

  • 创建一个名为trg_late_return的触发器,只要返回视频,它就会在DETAILRENTAL表中将正确的值写入DETAIL_DAYSLATE。更新DETAIL_RETURNDATE或DETAIL-DUEDATE属性时,触发器应作为BEFORE触发器执行。触发器应满足以下条件:

    1. 如果返回日期为空,则延迟的日期也应为空。
    2. 如果返回日期不为空,则延迟的日期应确定视频是否延迟返回。
    3. 如果返回日期是返回之后或之前的日期的中午,则视频不会被视为迟到,而迟到的日期应该为零。
    4. 如果返回日期是截止日期后一天的中午,那么视频会被视为延迟,因此必须计算并存储迟到的天数。
    5. "中午之前"宽限期仅适用于第二天的退货。宽限期后的任何退货计算为延迟一整天。请考虑以下示例:

      • 示例1:到期时间为1/1/14,在中午之前返回1/2/14,然后才迟到。
      • 示例2:到期后1/1/14在中午之后返回1/2/14,然后在1天后返回。
      • 示例3:到期1/1/14随时返回1/4/14,然后是3天晚

我目前的触发器看起来像这样

CREATE OR REPLACE TRIGGER TRG_LATE_RETURN 
BEFORE UPDATE OF DETAIL_RETURNDATE,DETAIL_DUEDATE ON DETAILRENTAL 
FOR EACH ROW 
BEGIN
  IF :NEW.DETAIL_RETURNDATE <> NULL THEN
    IF :NEW.DETAIL_RETURNDATE - DETAILRENTAL.DETAIL_DUEDATE > TO_CHAR (sysdate +12/24, 'HH24:MI:SS') THEN
      UPDATE DETAILRENTAL
      SET DETAILRENTAL.DETAIL_DAYSLATE = DETAIL_RETURNDATE - DETAIL_DUEDATE;
    ELSE
      UPDATE DETAILRENTAL
      SET DETAILRENTAL.DETAIL_DAYSLATE = 0;
    END IF;
  END IF;
END;

顺便说一句,这不起作用。我不知道如何检查时间。

0 个答案:

没有答案