与标题一样,我正在尝试解决我的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)
需要帮助请。
这将是一个触发因素,例如
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;
您可能必须在此处使用触发器:
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;