分区表

1、范围分区

 1、创建分区表

---创建范围分区表
CREATE TABLE sales_rang1
(sales_id number not null,
 product_id varchar2(5),
 sales_date date,
 sales_cost number(10),
 areacode varchar2(5)
)
partition by range(sales_date)
(partition part1 values less than (to_date('2011/01/01','yyyy/mm/dd')),
 partition part2 values less than (to_date('2012/01/01','yyyy/mm/dd')),
 partition part3 values less than (to_date('2013/01/01','yyyy/mm/dd')),
 partition part4 values less than (to_date('2014/01/01','yyyy/mm/dd'))
);

 2、查询分区表

--查询分区表
SELECT table_name,partition_name
  FROM user_tab_partitions
 WHERE table_name=UPPER('sales_rang1');

  3、添加分区

 --添加分区
 ALTER TABLE sales_rang1 ADD PARTITION part5 VALUES LESS THAN(to_date('2015-01-01','yyyy-mm-dd'));

 4、删除分区

 --删除part5分区
 ALTER TABLE sales_rang1 DROP PARTITION part5;

 5、如何把普通表,变成分区表

--第一步:创建test表
CREATE TABLE test
(sales_id number not null,
 product_id varchar2(5),
 sales_date date,
 sales_cost number(10),
 areacode varchar2(5)
); 
--第二步:给普通表添加(test_rang)分区
CREATE TABLE test_rang
partition by range(sales_date)
(partition part1 values less than (to_date('2011/01/01','yyyy/mm/dd')),
 partition part2 values less than (to_date('2012/01/01','yyyy/mm/dd')),
 partition part3 values less than (to_date('2013/01/01','yyyy/mm/dd')),
 partition part4 values less than (to_date('2014/01/01','yyyy/mm/dd'))
)
AS
select * from test;
--第三步:查看刚才创建的分区
select table_name,partition_name from user_tab_partitions where table_name=upper('test_rang');

图示:

2、间隔分区

 实现范围分区的自动化。

最开始的分区是永久分区,随着数据自动创建新的分区

    语法

PARTITION BY RANGE(column_name)
    INTERVAL(numtoyminterval(n,'interval_unit'))
          (PARTITION p1 VALUES LESS THAN(range1));

:其中INTERVAL代表 “间隔”,按照后面括号定义间隔添加分区

:numtoyminterval(n,'interval_unit')函数将n转换成interval_unit所指的值。

        interval_unit可以为:YEAR,MONTH

 1、创建分区

--创建间隔分区
CREATE TABLE sales_interval
(sales_id number not null,
 product_id varchar2(5),
 sales_date date,
 sales_cost number(10),
 areacode varchar2(5)
)
partition by range(sales_date)
INTERVAL(NUMTOYMINTERVAL(1,'YEAR'))
(PARTITION part1 VALUES LESS THAN (to_date('2011/01/01','yyyy/mm/dd'))
);

 2、查询分区表

--查询分区表
SELECT table_name,partition_name
  FROM user_tab_partitions
 WHERE table_name=UPPER('sales_interval');

 3、添加数据

--添加数据
 insert into sales_interval values (1000,'p1',to_date('2018-11-13','yyyy-mm-dd'),1000,'A1');

 4、查询数据

--第一步:查询分区表获得PARTTION_NAME
SELECT table_name,partition_name
  FROM user_tab_partitions
 WHERE table_name=UPPER('sales_interval');
--第二步:根据PARTTION_NAME查询新增数据
 select * from sales_interval partition(SYS_P21) 

         

注意:由于此时采用间隔分区,我们不知道新增数据在哪个分区,因此应该先查询出 PARTION_NAME,再执行查询即可。

 5、如何把普通表,变成分区表

--第一步:创建测试表test2
CREATE TABLE test2
(sales_id number not null,
 product_id varchar2(5),
 sales_date date,
 sales_cost number(10),
 areacode varchar2(5)
);
--第二步:给普通表创建间隔分区
CREATE TABLE test_interval
partition by range(sales_date)
(INTERVAL(NUMTOYMINTERVAL(1,'YEAR'))
(PARTITION part1 VALUES LESS THAN (to_date('2011/01/01','yyyy/mm/dd'))
)
AS
select * from test2;

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值