Oracle 用常量创建复合主键

标签 oracle composite-primary-key

使用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/

相关文章:

python - 为什么 SQLite 会插入重复的复合主键?

python - 在 Django 中,如何将具有复合主键的表连接到另一个表?

java - 使用带*嵌套*复合主键的@IdClass 的 JPA 1.0 限制?

postgresql - 具有复合主键的序列

mysql | mysql | PK 重复条目 - 非 PK 值更改已修复问题 - 为什么?

sql - UNION 与 WHERE 子句

java - oracle.sql.DATUM 已弃用。它的替代品是什么?

oracle - 使用 ODBC 连接到 Oracle DB

sql - 在 SQL 中,如何生成 5!56 的每个可能的唯一组合?

sql - 如何使用 to_date 函数转换复杂的 sysdate + 其他内容?