【发布时间】:2013-06-25 00:20:14
【问题描述】:
如何在 Oracle 11g 中设计一个表,以便以后与 Oracle 12c 中的新 “时间有效性” 特性兼容?
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 中将它们增强到适当的时期,对吧?
我继承了使用固定魔术日期表示“从始至终”和“永远”的数据库,例如 DATE '1900-01-01' 和 DATE '3999-12-31'。显然,12c 使用了NULL。
那么,我们是否必须放弃使用固定的魔术日期并改用NULL 日期?
【问题讨论】:
-
关于 12c 的好问题!我还没有使用 12c,所以只需添加评论而不是答案。我对 Temporarl Validity 功能的初步解读是,虽然 NULL 更可取,但魔术日期也可以正常工作。它们可能会在一定程度上干扰 Oracle 的 CBO 并导致糟糕的查询计划,但无论如何,魔术值总是如此。并且 12c 的新直方图也可能在某种程度上缓解这种情况。
标签: sql oracle oracle11g oracle12c