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

问题描述 投票:1回答:2

与标题一样,我正在尝试解决我的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,DBTIMEZONE,LOCALTIMESTAMP,SESSIONTIMEZONE,SYSDATE,SYSTIMESTAMP,UID,USER和USERENV)

需要帮助请。

sql database oracle check-constraints
2个回答
1
投票

这将是一个触发因素,例如

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;

0
投票

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

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;
© www.soinside.com 2019 - 2024. All rights reserved.