如何在Oracle 11g中设计一个表,以便以后与Oracle 12c中的新"Temporal validity"功能兼容?
Oracle 12c的联机文档指定了如何在SQL语言指南中定义时间有效性(http://docs.oracle.com/cd/E16655_01/server.121/e17209/statements_7002.htm#CJADHJHB)
ALTER TABLE my_table ADD (PERIOD FOR my_valid_time (my_valid_start, my_valid_end) );
因此,可以使用11g中已有的旧的valid_from和valid_till列,并在12c中将它们加强到适当的时间段,对吧?
我继承了使用"since always"和"for ever"的固定魔术日期的数据库,例如 DATE '1900-01-01'
和 DATE '3999-12-31'
. 显然,12c使用 NULL
代替 .
那么,我们是否必须放弃使用固定的魔法日期并切换到 NULL
日期?
1 回答
是的,您将能够在12c中更改表以启用时间有效性(请参阅文档的ALTER TABLE部分:http://docs.oracle.com/cd/E16655_01/server.121/e17209/statements_3001.htm#CJAEGCFI)
它的工作原理是将您的where子句转换为“<=”和“>或null”子句,因此如果您不想更改固定日期,则无需更改固定日期 .
Tom Kyte今天刚刚在他的博客上发布了一些关于这个问题的例子:http://tkyte.blogspot.com/2013/07/12c-flashforward-flashback-or-see-it-as.html