如何创建一个 CHECK 约束,允许用户从今天起只输入 DateTime?

How to make a CHECK constraint that allow user to only input DateTime from today and onwards?

正如标题一样,我正在尝试解决我的 CHECK 限制,用户只能输入从今天开始的日期和时间

这是我现在使用的SQL开发者版本(我查询的版本):
- Oracle Database 12c 企业版 12.2.0.1.0 版 - 64 位生产
- PL/SQL 版本 12.2.0.1.0 - 生产

我尝试过的:

ALTER TABLE job_assignment
    ADD CONSTRAINT chk_start_date CHECK ( start_date >=
    SYSDATE()
);

但这给了我一个错误,ORA-00907:缺少右括号。

我也遇到过这个,
检查约束的条件不能包含以下构造:
- 子查询和标量子查询表达式
- 调用不确定的函数(CURRENT_DATE, CURRENT_TIMESTAMP, 数据库时区, 本地时间戳,会话时区, SYSDATE、SYSTIMESTAMP、UID、USER 和 USERENV)

需要帮助

您可能必须在此处使用触发器:

CREATE TRIGGER chk_date_today
BEFORE INSERT ON job_assignment
FOR EACH ROW
BEGIN
    IF (:NEW.start_date < SYSDATE()) THEN
        raise_application_error(-20001, 'start_date must be after now');
   END IF;
END;

这将是一个触发器,例如

create or replace trigger trg_biu_jobas
  before insert or update on job_assignment
  for each row
begin
  if :new.start_date < sysdate then
     raise_application_error(-20001, 'Start date must be after "now"');
  end if;
end;