Oracle创建分区表(按年、季、月、周、日自动分区)

前言

这种分区方式会根据插入的数据自动增加分区,不需要手工维护
分区字段必须是日期类型


一、按年分区 :

1、新建表、新建分区

create table pt_range_test2(
  pid         number(10),
  pname       varchar2(30),
  create_date date
) partition by range(create_date)(
  partition p_2019 values less than(to_date('2020-01-01', 'YYYY-MM-DD')),
  partition p_2020 values less than(to_date('2021-01-01', 'YYYY-MM-DD')),
  partition p_2021 values less than(to_date('2022-01-01', 'YYYY-MM-DD')),
  partition p_2022 values less than(to_date('2023-01-01', 'YYYY-MM-DD')),
  partition p_other values less than(MAXVALUE)
) enable row movement;

2、插入测试数据

insert into pt_range_test2 (pid, pname, create_date) values (1, '瑶瑶', TO_DATE (
			'2020-02-12 15:56:12',
			'SYYYY-MM-DD HH24:MI:SS'
		));
insert into pt_range_test2 (pid, pname, create_date) values (1500, '倩倩', TO_DATE (
			'2022-02-12 15:56:12',
			'SYYYY-MM-DD HH24:MI:SS'
		));
insert into pt_range_test2 (pid, pname, create_date) values (2, '优优', TO_DATE (
			'2021-02-12 15:56:12',
			'SYYYY-MM-DD HH24:MI:SS'
		));

3、验证数据是否存储到各个分区

select 'p_2019' 分区名, t.* from pt_range_test2 partition (p_2019) t union all
select 'p_2020' 分区名, t.* from pt_range_test2 partition (p_2020) t union all
select 'p_2021' 分区名, t.* from pt_range_test2 partition (p_2021) t union all
select 'p_2022' 分区名, t.* from pt_range_test2 partition (p_2022) t;

验证数据是否存储到各个分区

二、按季度分区 :

create table test.test_r1
(
id NUMBER(20) not null primary key,
name VARCHAR2(20) not null,
joindate DATE not null
) tablespace test
partition by range(joindate) interval (numtoyminterval(3,'month'))
(partition p_before_2021 values less than (to_date('2022-01-01','YYYY-MM-DD'))
);

三、按月分区 :

create table test.test_r1
(
id NUMBER(20) not null primary key,
name VARCHAR2(20) not null,
joindate DATE not null
) tablespace test
partition by range(joindate) interval (numtoyminterval(1,'month'))
(partition p_before_2021 values less than (to_date('2022-01-01','YYYY-MM-DD'))
);

四、按天分区 :

create table test.test_r1
(
id NUMBER(20) not null primary key,
name VARCHAR2(20) not null,
joindate DATE not null
) tablespace test
partition by range(joindate) interval (numtodsinterval(1,'day'))
(partition p_before_2021 values less than (to_date('2022-01-01','YYYY-MM-DD'))
);

五、按周分区 :

create table test.test_r1
(
id NUMBER(20) not null primary key,
name VARCHAR2(20) not null,
joindate DATE not null
) tablespace test
partition by range(joindate) interval (numtodsinterval(7,'day'))
(partition p_before_2021 values less than (to_date('2022-01-01','YYYY-MM-DD'))
);

总结

如果此篇文章有帮助到您, 希望打大佬们能关注点赞收藏评论支持一波,非常感谢大家!
如果有不对的地方请指正!!!

参考1

参考2

  • 4
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lfwh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值