【发布时间】:2020-11-02 04:36:29
【问题描述】:
能否请您分享一些关于 Oracle 中具有临时有效性的表的主键操作的信息?
我创建了一个具有以下架构的表
Create table TemporalTable_1 (
Customer_ID number(8),
Customer_name varchar2(100),
valid_period_start timestamp,
valid_period_end timestamp,
period for valid_period(valid_period_start, valid_period_end),
constraint TemporalTable_1_PK primary key (Customer_ID , VALID_PERIOD)
)
我有来自另一个表“OtherTable”的以下记录,我需要复制到 TemporalTable_1
客户ID |客户名称 |有效周期开始 | Valid_Period_end ------------------+------------------------+-------- -----------------+------------------------ 00001 |约翰·陈 | 2020 年 6 月 1 日 00:00:00 | 2020 年 6 月 9 日 23:59:59 00001 |强尼陈 | 2020 年 6 月 10 日 00:00:00 |空值以下是我的脚本:
insert into TemporalTable_1 select * from OtherTable;
ORA-00001:违反了唯一约束 (TemporalTable_1)
在执行插入语句之前,表是空白的。所以我的问题是为什么我不允许将行复制到 TemporalTable_1 即使行有不同的valid_period。
是不是因为Oracle其实并不关心主键上的有效期列?
提前致谢!
【问题讨论】:
-
为什么 PK 中有一个空值?这在语义上是什么意思?
-
@OldProgrammer,空值就是空值。但最重要的是它不是因为那里的“null”值,否则,我期待看到“ORA-01400 : cannot insert null into primary key”。
-
@SayanMalakshinov,是的,我愿意。它们看起来都像我的例子。
标签: sql oracle indexing primary-key temporal-tables