如何创建一个 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;
正如标题一样,我正在尝试解决我的 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;