【发布时间】:2022-01-16 10:04:52
【问题描述】:
我需要完整性约束,其中不应有过去的日期,而是当前日期或未来。
我有一个名为 Date_time 的列。
需要做的是它不应该允许过去的日期,而只允许当前或未来的日期。
我试过了:
CONSTRAINT chk_Date_time CHECK (Date_time
任何帮助都会很棒。
编辑: 当前日期如 12/12/2021 输入时无效。我怎样才能让今天不仅在未来工作。
【问题讨论】:
我需要完整性约束,其中不应有过去的日期,而是当前日期或未来。
我有一个名为 Date_time 的列。
需要做的是它不应该允许过去的日期,而只允许当前或未来的日期。
我试过了:
CONSTRAINT chk_Date_time CHECK (Date_time
任何帮助都会很棒。
编辑: 当前日期如 12/12/2021 输入时无效。我怎样才能让今天不仅在未来工作。
【问题讨论】:
您不能为此使用约束。约束必须是确定性的——它们必须(对于给定值)始终为真或始终为假。您不能有基于 sysdate 的约束,因为您现在插入的通过约束的行将在未来某个时间点无法通过约束检查。
您可以为插入的时间戳添加第二列并在其上创建约束
CONSTRAINT chk_future CHECK( date_time > insert_datetime )
但更常见的是,您会创建一个仅在插入数据时验证数据的触发器
CREATE OR REPLACE TRIGGER trg_chk_future
BEFORE INSERT ON your_table
FOR EACH ROW
BEGIN
IF( :new.date_time < sysdate )
THEN
RAISE_APPLICATION_ERROR( -20001, 'date_time must be in the future' );
END IF;
END;
【讨论】:
date '2021-12-12',它的时间部分是午夜,当然,它会早于当前的sysdate,它有一个时间部分。也许您真的想与将在午夜返回当天的trunc(sysdate) 进行比较。