你能告诉我一些关于在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”的以下记录,我需要复制到临时表\u 1中
Customer_ID | Customer_name | Valid_period_start | Valid_Period_end
------------------+----------------------+-------------------------+-----------------------
00001 | John Chan | 01 JUN 2020 00:00:00 | 09 JUN 2020 23:59:59
00001 | Johnny Chan | 10 JUN 2020 00:00:00 | Null
以下是我的剧本:
insert into TemporalTable_1 select * from OtherTable;
ora-00001:违反了唯一约束(临时表1)
在执行insert语句之前,表是空的。所以我的问题是为什么不允许我将行复制到临时表1中,即使行的有效期不同。
是因为oracle实际上不关心主键上的validperiod列吗?
提前谢谢!
2条答案
按热度按时间0kjbasz61#
period name(在您的例子中是有效的\u period)列只包含您的period的id。检查此脚本及其“输出:
如您所见,我添加了2个有效期:valid\u period(如您的案例)和vt。请注意,隐藏列valid\u period和vt只包含它们的id。它们对于表中的所有行都是相同的。此外,在下面philippsalvisberg的演示中,您可以看到oracle中的时间有效性还不支持时间完整性约束,而且它甚至不支持对重叠周期的检查。所以还不能创建这样的约束。但您可以阅读这些内容的旧方法(例如,像外键约束start\u date->prev(end\u date)和id上的唯一约束start\u date)
输出:
https://www.doag.org/formes/pubfiles/5217205/2013-dev-philipp_salvisberg-multi-temporal_database_features_in_oracle_12c-praesentation.pdf
irtuqstp2#
可以肯定的是,暂时有效性还没有装备好,以本机处理主键等。
valid\u period列是隐藏的,这意味着我们使用它来帮助实现特性所需的查询转换,而不是在其上添加主键。