oracle 我想实现一个触发器,以确保新日期不能设置为超过或高于当前日期

mo49yndu  于 2023-04-29  发布在  Oracle
关注(0)|答案(1)|浏览(213)

当输入的日期高于或超过设置的日期时,它会抛出一个错误。但是当日期完全相同时,它仍然会抛出错误,这是不应该的。
这是我的代码

CREATE OR REPLACE TRIGGER hire_date_check
before insert or update on Staff
FOR EACH ROW
DECLARE
   minimum_date date := sysdate;
BEGIN
IF :NEW.Hire_date = minimum_date 
END IF;
    
if  :NEW.Hire_Date < minimum_date then
 raise_application_error(-20000, 'cant be below Minimum date' || minimum_date);
end if;

 if :NEW.Hire_Date > minimum_date then
 raise_application_error(-20001, 'cant be Above Minimum date' || minimum_date);
  end if;
END;
/
COMMIT
/
hmtdttj4

hmtdttj41#

Sysdate同时包含date和time,这意味着在插入staff表时,您应该完全匹配该值,否则两个IF都将失败。
假设人们是在一个 * 日期被雇用的(e。今天是28。2023年4月),不指定时间分量(e.我今天28岁被录用了。04.2023 at 11:32:28),然后truncatesysdate:

CREATE OR REPLACE TRIGGER hire_date_check
   BEFORE INSERT OR UPDATE
   ON Staff
   FOR EACH ROW
DECLARE
   minimum_date  DATE := TRUNC (SYSDATE);         --> this
BEGIN
   IF :NEW.Hire_Date < minimum_date
   THEN
      raise_application_error (-20000, 'cant be below Minimum date' || minimum_date);
   END IF;

   IF :NEW.Hire_Date > minimum_date
   THEN
      raise_application_error (-20001, 'cant be Above Minimum date' || minimum_date);
   END IF;
END;
/

相关问题