原文链接:
https://blog.csdn.net/w1316022737/article/details/83274839
一:范围分区
就是根据数据库表中某一字段的值的范围来划分分区,例如:
create table graderecord(sno varchar2(10),sname varchar2(20),dormitory varchar2(3),grade int)partition by range(grade)(partition bujige values less than(60), --不及格partition jige values less than(85), --及格partition youxiu values less than(maxvalue) --优秀) ;
插入实验数据:
insert into graderecord values('511601','魁','229',92);insert into graderecord values('511602','凯','229',62);insert into graderecord values('511603','东','229',26);insert into graderecord values('511604','亮','228',77);insert into graderecord values('511605','敬','228',47);insert into graderecord(sno,sname,dormitory) values('511606','峰','228');commit;
下面查询一下全部数据,然后查询各个分区数据,代码一起写:
select * from graderecord;select * from graderecord partition(bujige);select * from graderecord partition(jige);select * from graderecord partition(youxiu);
全部数据如下:
不及格数据如下:
及格数据如下:
优秀数据如下:
说明:数据中有空值,Oracle机制会自动将其规划到maxvalue的分区中。
二,间隔分区
–创建间隔分区表
CREATE TABLE SALES2(SALES_ID NUMBER,PRODUCT_ID VARCHAR2(5),SALES_DATE DATE NOT NULL)PARTITION BY RANGE(SALES_DATE)INTERVAL(NUMTOYMINTERVAL(3,'MONTH'))(PARTITION P1 VALUES LESS THAN (to_date('2013-04-1','yyyy/mm/dd')));
–插入数据
INSERT INTO sales2 VALUES (1,'a',to_date('2013-08-1','yyyy/mm/dd'));
–获得分区情况
SELECT table_name,partition_nameFROM user_tab_partitionsWHERE table_name=UPPER('sales2');
–查询输出结果,系统自动根据输入数据情况创建新分区“SYS_P82”
TABLE_NAME PARTITION_NAME----------------------------SALES2 P1SALES2 SYS_P21
–查询分区数据
SELECT * FROM sales2 PARTITION(sys_P21);
查询oracle分区表存在多少个分区
注意,表名区分大小写
SELECT * FROM useR_TAB_PARTITIONS WHERE TABLE_NAME=’分区表名称’;
SELECT * FROM useR_TAB_PARTITIONS WHERE TABLE_NAME='GRADERECORD'

