【发布时间】:2018-07-05 20:20:28
【问题描述】:
我们使用分区来删除旧数据(Oracle 称之为ILM)。 有一列带有“最佳日期”,之后将删除分区。
为避免手动(或按脚本)添加分区,我们使用间隔分区:
CREATE TABLE my_table (
id NUMBER NOT NULL PRIMARY KEY,
--... other columns ...
t DATE
) PARTITION BY RANGE (t) INTERVAL(NUMTODSINTERVAL(7, 'DAY')) (
PARTITION PRE2018 VALUES LESS THAN (DATE '2018-01-01')
);
INSERT INTO my_table(id, t) VALUES (1, SYSDATE);
-- 1 row inserted.
... 工作正常,但我们不能将分区日期留给NULL:
INSERT INTO my_table(id, t) VALUES (2, NULL);
-- ORA-14300: partitioning key maps to a partition outside maximum permitted number of partitions
如何解决?
【问题讨论】:
-
您不能,如果您需要日期可以为空,您可能需要添加另一个日期列(例如 createDate 默认 SYSDATE)并在其上进行分区。
-
@BigMike 感谢您的确认。 createDate 不是一个选项,因为我们的列是删除日期(正如我在问题中所写)
-
分区列中不可能有空值。您设置不为空,并在适用值中设置一些默认值,例如“01-01-1900”,将其分配给另一个临时分区
-
NULL as key for interval partitioning is not allowed NULL 值在使用间隔分区时不能存储在分区键列中。跨度>