在间隔分区创建查询中替代 VALUES LESS THAN
Alternative to VALUES LESS THAN in interval partitioing creation query
我们知道间隔分区是范围分区的扩展,它的大部分语法来自
范围分区。
从网络上的各种来源,我假设间隔分区创建查询确实具有强制性的以下子句:
值小于 (XXX)
但是当我们进行间隔分区时,有没有更简单的方法,我们不提供任何 VALUE LESS THAN CLAUSE。
我正在搜索类似于 EQUAL TO (012019) 的内容,其中 012019 对应于一月份的间隔
2019年。
我浏览了 help/understanding 的以下链接,但找不到对我的问题有用的链接。
http://www.dba-oracle.com/t_interval_partitioning.htm
https://docs.oracle.com/database/121/VLDBG/GUID-C121EA1B-2725-4464-B2C9-EEDE0C3C95AB.htm
我使用的代码如下:
create table
pos_data (
start_date DATE,
store_id NUMBER,
inventory_id NUMBER(6),
qty_sold NUMBER(3)
)
PARTITION BY RANGE (start_date)
INTERVAL(NUMTOYMINTERVAL(1, 'MONTH'))
(
PARTITION pos_data_p2 VALUES LESS THAN (TO_DATE('1-7-2007', 'DD-MM-YYYY')),
PARTITION pos_data_p3 VALUES LESS THAN (TO_DATE('1-8-2007', 'DD-MM-YYYY'))
);
从我的搜索看来,除了 VALUE LESS THAN 之外别无他法。
如果有人对创建基于间隔的分区的其他方法有所了解,请分享。
其余:我的问题在上面的粗体部分
我想你要找的是 partition extended name
PARTITION FOR(DATE'2019-01-01')
其实LESS THAN
定义在区间划分接近于零的作用
在创建 table 以 定义数据的一些下限时只使用一次 。
这里是定义一个 table 包含从 2019 年开始的数据的示例
create table pos_data (
start_date DATE,
store_id NUMBER
)
SEGMENT CREATION DEFERRED
PARTITION BY RANGE (start_date)
INTERVAL(NUMTOYMINTERVAL(1, 'MONTH'))
(
PARTITION pos_data_init VALUES LESS THAN (TO_DATE('1-1-2019', 'DD-MM-YYYY'))
);
请注意,第一个分区不是间隔分区 (INTERVAL = NO
),并且由于 SEGMENT CREATION DEFERRED
而在物理上不存在。它也永远不会包含任何数据,因为您从 2019 年的内容开始。
select PARTITION_POSITION,PARTITION_NAME,INTERVAL,MIN_EXTENT, HIGH_VALUE
from user_tab_partitions where table_name = 'POS_DATA'
order by PARTITION_POSITION;
PARTITION_POSITION PARTITION_NAME INTERVAL MIN_EXTENT HIGH_VALUE
------------------ -------------- -------- ---------- -------------------------------
1 POS_DATA_INIT NO TO_DATE(' 2019-01-01 00:00:00',
新分区被创建即时例如插入新数据时,您不需要指定 LESS THAN
insert into pos_data(start_date,store_id) values(DATE'2019-01-01',1);
PARTITION_POSITION PARTITION_NAME INTERVAL MIN_EXTENT HIGH_VALUE
------------------ -------------- -------- ---------- -------------------------------
1 POS_DATA_INIT NO TO_DATE(' 2019-01-01 00:00:00',
2 SYS_P16713 YES 1 TO_DATE(' 2019-02-01 00:00:00',
虽然 访问 table 您使用 partition_extended_name
,您可以选择一个月内的任何日期来引用分区.
select * from pos_data
partition for (date'2019-01-15');
相同的语法可用于分区维护
alter table pos_data move partition for (date'2019-01-30') compress;
我们知道间隔分区是范围分区的扩展,它的大部分语法来自 范围分区。
从网络上的各种来源,我假设间隔分区创建查询确实具有强制性的以下子句: 值小于 (XXX)
但是当我们进行间隔分区时,有没有更简单的方法,我们不提供任何 VALUE LESS THAN CLAUSE。 我正在搜索类似于 EQUAL TO (012019) 的内容,其中 012019 对应于一月份的间隔 2019年。
我浏览了 help/understanding 的以下链接,但找不到对我的问题有用的链接。
http://www.dba-oracle.com/t_interval_partitioning.htm
https://docs.oracle.com/database/121/VLDBG/GUID-C121EA1B-2725-4464-B2C9-EEDE0C3C95AB.htm
我使用的代码如下:
create table
pos_data (
start_date DATE,
store_id NUMBER,
inventory_id NUMBER(6),
qty_sold NUMBER(3)
)
PARTITION BY RANGE (start_date)
INTERVAL(NUMTOYMINTERVAL(1, 'MONTH'))
(
PARTITION pos_data_p2 VALUES LESS THAN (TO_DATE('1-7-2007', 'DD-MM-YYYY')),
PARTITION pos_data_p3 VALUES LESS THAN (TO_DATE('1-8-2007', 'DD-MM-YYYY'))
);
从我的搜索看来,除了 VALUE LESS THAN 之外别无他法。
如果有人对创建基于间隔的分区的其他方法有所了解,请分享。
其余:我的问题在上面的粗体部分
我想你要找的是 partition extended name
PARTITION FOR(DATE'2019-01-01')
其实LESS THAN
定义在区间划分接近于零的作用
在创建 table 以 定义数据的一些下限时只使用一次 。
这里是定义一个 table 包含从 2019 年开始的数据的示例
create table pos_data (
start_date DATE,
store_id NUMBER
)
SEGMENT CREATION DEFERRED
PARTITION BY RANGE (start_date)
INTERVAL(NUMTOYMINTERVAL(1, 'MONTH'))
(
PARTITION pos_data_init VALUES LESS THAN (TO_DATE('1-1-2019', 'DD-MM-YYYY'))
);
请注意,第一个分区不是间隔分区 (INTERVAL = NO
),并且由于 SEGMENT CREATION DEFERRED
而在物理上不存在。它也永远不会包含任何数据,因为您从 2019 年的内容开始。
select PARTITION_POSITION,PARTITION_NAME,INTERVAL,MIN_EXTENT, HIGH_VALUE
from user_tab_partitions where table_name = 'POS_DATA'
order by PARTITION_POSITION;
PARTITION_POSITION PARTITION_NAME INTERVAL MIN_EXTENT HIGH_VALUE
------------------ -------------- -------- ---------- -------------------------------
1 POS_DATA_INIT NO TO_DATE(' 2019-01-01 00:00:00',
新分区被创建即时例如插入新数据时,您不需要指定 LESS THAN
insert into pos_data(start_date,store_id) values(DATE'2019-01-01',1);
PARTITION_POSITION PARTITION_NAME INTERVAL MIN_EXTENT HIGH_VALUE
------------------ -------------- -------- ---------- -------------------------------
1 POS_DATA_INIT NO TO_DATE(' 2019-01-01 00:00:00',
2 SYS_P16713 YES 1 TO_DATE(' 2019-02-01 00:00:00',
虽然 访问 table 您使用 partition_extended_name
,您可以选择一个月内的任何日期来引用分区.
select * from pos_data
partition for (date'2019-01-15');
相同的语法可用于分区维护
alter table pos_data move partition for (date'2019-01-30') compress;