【问题标题】:Integrity Constraints for date (using oracle) [duplicate]日期的完整性约束(使用 oracle)[重复]
【发布时间】:2022-01-16 10:04:52
【问题描述】:

我需要完整性约束,其中不应有过去的日期,而是当前日期或未来。

我有一个名为 Date_time 的列。

需要做的是它不应该允许过去的日期,而只允许当前或未来的日期。

我试过了:

CONSTRAINT chk_Date_time CHECK (Date_time

任何帮助都会很棒。

编辑: 当前日期如 12/12/2021 输入时无效。我怎样才能让今天不仅在未来工作。

【问题讨论】:

标签: sql oracle


【解决方案1】:

您不能为此使用约束。约束必须是确定性的——它们必须(对于给定值)始终为真或始终为假。您不能有基于 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;

【讨论】:

  • 我已经尝试过了,但是当我输入当前日期,例如今天(2021 年 12 月 12 日)时,就会出现错误。
  • @user17659635 - 首先,什么是“这个”?约束?触发?编辑您的问题以准确地向我们展示您正在尝试做什么、您正在使用什么代码、您正在运行什么 DML、您遇到什么错误等等。Oracle 日期总是有一个日期和一个时间部分。我的猜测是你的意思是说你试图插入一个date '2021-12-12',它的时间部分是午夜,当然,它会早于当前的sysdate,它有一个时间部分。也许您真的想与将在午夜返回当天的trunc(sysdate) 进行比较。
猜你喜欢
  • 2012-07-11
  • 2012-01-31
  • 2022-01-16
  • 1970-01-01
  • 2012-09-19
  • 2017-06-11
  • 1970-01-01
  • 1970-01-01
  • 2016-05-04
相关资源
最近更新 更多