sql - 如何在 Oracle 的间隔分区表中存储 NULL 值?
问题描述
我们使用分区来删除旧数据(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
如何解决?
解决方案
例如,您可以这样做:
CREATE TABLE my_table (
ID NUMBER NOT NULL PRIMARY KEY,
--... other columns ...
t TIMESTAMP(0),
PARTITION_KEY TIMESTAMP(0) GENERATED ALWAYS AS (COALESCE(t, TIMESTAMP '2999-01-01 00:00:00')) VIRTUAL
)
PARTITION BY RANGE (PARTITION_KEY) INTERVAL( NUMTODSINTERVAL(7, 'DAY')) (
PARTITION PRE2018 VALUES LESS THAN (TIMESTAMP '2018-01-01 00:00:00')
);
解决它应该很简单PARTITION FOR (TIMESTAMP '2999-01-01 00:00:00')
也许您也可以GENERATED ALWAYS AS (COALESCE(t, TIMESTAMP '1900-01-01 00:00:00'))
根据更适合您的逻辑使用。
推荐阅读
- python-3.x - 为python烧瓶生成优惠券
- javascript - 将一个键的值和值添加到数组中的另一个属性
- c# - C# 解析 SQL 语句以查找存储过程中使用的所有 INSERT/UPDATE/DELETE 表
- css - React-Datepicker:如何更改导航箭头?
- python - 蟒蛇新手。需要帮助来理解代码
- json - 从 json 对象中检索值时出现双引号问题
- reactjs - React Redux:使用 Enzyme/Jest 测试 mapStateToProps 和 mapDispatchToProps
- javascript - 在 bbcode 标签之外的文本中添加标签
- php - 在 MAMP 4.4.1 PHP 7.2.1 上启用 SSH2
- abap - 如何动态调用字段符号