我正在使用Oracle SQL Developer。
以下是我创建的下表:
CREATE Screening_Plan
(
plan_id NUMBER (4) PRIMARY KEY,
movie_id NUMBER (4) NOT NULL,
plan_start_date DATE NOT NULL,
plan_end_date DATE NOT NULL,
plan_min_start_hh24 NUMBER (2) NOT NULL,
plan_max_start_hh24 NUMBER (2) NOT NULL,
plan_no_of_screenings NUMBER (2) NOT NULL
);
对于plan_start_date列,如何将约束添加到默认值:下周一?
对于plan_end_date列,如何将约束添加到默认值:下周一+6(天)?
对于plan_min_start_hh24列,如何添加约束以保持值在9(上午9:00)和22(晚上10:00)之间,并将默认值设置为9?
对于plan_max_start_hh24列,如何添加约束以保持9(上午9:00)和22(晚上10:00)之间的值,并将默认值设置为22并设置大于或等于plan_min_start_hh24?
答案 0 :(得分:0)
Oracle中的约束不能引用任何非确定性的,即结果可能/将随时间变化的表达式。这意味着你不能使用约束来强制执行下周一和#34;等事情。通常,无论何时评估,约束必须为真或假。请参阅Restrictions on Check Constraints。
然而,这可以作为该表的触发器来完成。
至于其他约束,这样的事情应该有效:
alter table Screening_Plan add constraint Screening_Plan_ck1 check (
plan_min_start_hh24 between 9 and 22
);
alter table Screening_Plan modify(plan_min_start_hh24 number(2) not null default 9);