如何编写Oracle数据库触发器实现假期时长不低于7天的校验规则
Oracle假期申请审批时长校验触发器实现方案
前提约定
我们先统一表结构约定,你可以根据实际业务的表名、字段名做替换:
- 假期申请表名:
LEAVE_APPLICATIONS - 核心字段:
SUBMIT_TIMEDATE:用户提交假期申请的时间APPROVAL_COMPLETE_TIMEDATE:管理员操作审批的时间APPROVAL_STATUSVARCHAR2(20):审批状态,可选值为待审批/已通过/已驳回
触发器代码
CREATE OR REPLACE TRIGGER trg_check_approval_duration BEFORE INSERT OR UPDATE OF APPROVAL_STATUS, APPROVAL_COMPLETE_TIME ON LEAVE_APPLICATIONS FOR EACH ROW BEGIN -- 仅校验审批通过的申请 IF :NEW.APPROVAL_STATUS = '已通过' THEN -- 计算审批时长,不足7天则抛出异常阻止操作 IF (:NEW.APPROVAL_COMPLETE_TIME - :NEW.SUBMIT_TIME) < 7 THEN RAISE_APPLICATION_ERROR(-20001, '操作失败:审批时长不足7天的假期申请不允许通过'); END IF; END IF; END; /
常见调整方案
如果你的实际需求是校验假期本身的时长不足7天不允许申请/审批,只需要修改校验逻辑即可:
- 先确保你的表有
LEAVE_START_DATE(假期开始日期)和LEAVE_END_DATE(假期结束日期)两个字段 - 把上面触发器中IF判断的条件替换为:
IF (:NEW.LEAVE_END_DATE - :NEW.LEAVE_START_DATE) < 7 THEN
内容的提问来源于stack exchange,提问作者charlyo
相关产品推荐
相关产品推荐

