使用oracle,如何创建带有约束检查的复合主键。
以下是想要完成的示例
create table T (
n int,
dt DATE,
constraint t_pk primary key (n,
(dt=trunc(dt, 'dd')));
最佳答案
如果您只想允许日期的时间设置为午夜,则使用单独的检查约束:
create table T (
n int,
dt DATE,
constraint t_chk check (dt=trunc(dt, 'dd')),
constraint t_pk primary key (n, dt)
);
如果您想允许非午夜时间,但每天只允许一次,那么您可以使用虚拟列,正如 @gsalem 还建议的那样:
create table T (
n int,
dt DATE,
dd DATE generated always as (trunc(dt)),
constraint t_pk primary key (n, dd)
);
db<>fiddle显示两者;请注意两个 select 语句的输出时间不同。
关于Oracle 用常量创建复合主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62642288/