創建分區表

********************************************************************************

創建分區表

CREATE TABLE ccc1

            ( id number(8),name varchar2(30),sales_date date)

   PARTITION BY RANGE (sales_date)

  (PARTITION p1 VALUES LESS THAN ( TO_DATE('01-JAN-1999','DD-MON-YYYY')) tablespace zh,

   PARTITION p2 VALUES LESS THAN ( TO_DATE('01-JAN-2000','DD-MON-YYYY')) tablespace zh,

   PARTITION p3 VALUES LESS THAN ( TO_DATE('01-JAN-2001','DD-MON-YYYY')) tablespace zh,

   PARTITION p4 VALUES LESS THAN ( TO_DATE('01-JAN-2002','DD-MON-YYYY')) tablespace zh,

   PARTITION p5 VALUES LESS THAN (MAXVALUE) tablespace zh

  );

 

插入數據

 insert into ccc1 values(1,'PC1',to_date('17-FEB-2000','DD-MON-YYYY'));

 insert into ccc1 values(2,'PC2',to_date('17-FEB-2001','DD-MON-YYYY'));

 insert into ccc1 values(3,'PC3','17-FEB-1999');

 insert into ccc1 values(4,'PC4','15-FEB-2000');

 insert into ccc1 values(5,'PC5','17-FEB-2002');

 insert into ccc1 values(6,'PC6','12-FEB-2001');

insert into ccc1 values(7,'PC7','11-FEB-1998');

 insert into ccc1 values(8,'PC8','13-FEB-2002');

 

SQL> insert into ccc1 values(8,'PC8','13-FEB-2013');

 

創建唯一索引

CREATE unique INDEX i_ccc1_id ON ccc1(id) GLOBAL

PARTITION BY HASH (id)

(PARTITION pi1  TABLESPACE zh,

 PARTITION pi2  TABLESPACE zh,

 PARTITION pi3  TABLESPACE zh,

 PARTITION pi4  TABLESPACE zh) parallel 4;

 

創建失敗有重複值 --去重查詢id相同的爲重複但rowid都是不同的。以此去重。

SQL> select a.* from ccc1 a where a.rowid in(select min(b.rowid) from ccc1 b where b.id=a.id);

查詢重複數據

SQL> select a.* from ccc1 a where a.rowid not in(select min(b.rowid) from ccc1 b where b.id=a.id); 

刪除重複數據

SQL> delete from ccc1 a where a.rowid not in(select min(b.rowid) from ccc1 b where b.id=a.id);   

 

再創建索引 全局唯一

CREATE unique INDEX i_ccc1_id ON ccc1(id) GLOBAL

PARTITION BY HASH (id)

(PARTITION pi1  TABLESPACE zh,

 PARTITION pi2  TABLESPACE zh,

 PARTITION pi3  TABLESPACE zh,

 PARTITION pi4  TABLESPACE zh) parallel 4;       

 

創建局部分區索引

SQL> create index i_ccc1_date on ccc1(sales_date) local;              

 

創建不分區索引

SQL> create index i_ccc1_name on ccc1(name);

         

查詢索引信息

SQL> select index_name,index_type,table_name,tablespace_name,partitioned from dba_indexes where table_name ='CCC1';

 

添加分區

SQL> alter table ccc1 add partition p6 values less than (to_date('2019-01-01','yyyy-mm-dd')) tablespace zh;

alter table ccc1 add partition p6values less than (to_date('2019-01-01','yyyy-mm-dd')) tablespace zh

                               *

ERROR at line 1:

ORA-14074: partition bound must collate higher than that of the last partition

報錯因爲前面用過PARTITION p5 VALUES LESS THAN (MAXVALUE)所以有倆種辦法解決

第一刪除p5重新添加

Alter table ccc1 droppartition p5;

第二拆分分區 :split  合併分區gerge

 

查詢分區表

SQL> SELECT TABLESPACE_NAME,TABLE_NAME, PARTITION_NAME

FROM DBA_TAB_PARTITIONS WHERE TABLE_NAME='CCC1'

ORDER BY TABLESPACE_NAME;


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章