在具有特定条件

时间:2017-08-04 15:17:42

标签: sql oracle oracle-sqldeveloper

我正在使用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?

1 个答案:

答案 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);