/**根据区分表空间建表**/     
 CREATE TABLE MYDB
 (SID NUMBER(2) PRIMARY KEY,
      SNAME CHAR(5) NOT NULL,
      SPHONE NUMBER(11) NULL,
      SADDR VARCHAR2(10) DEFAULT '广东')
      PARTITION BY LIST (SADDR)--列表分区:根据某个字段的具体值分区(list)
      (PARTITION PA_ADD1 VALUES ('广东') TABLESPACE SYSTEM,
       PARTITION PA_ADD2 VALUES ('广西') TABLESPACE USERS
      )
      
 CREATE TABLE MYDB
 (SID NUMBER(2) PRIMARY KEY,
      SNAME CHAR(5) NOT NULL,
      SPHONE NUMBER(11) NULL,
      SADDR VARCHAR2(10) DEFAULT '广东')
      PARTITION BY RANGE (SID)--范围分区:根据某个字段在某个范围内进行分区(range...less)
      (PARTITION PA_ADD1 VALUES LESS THAN(100) TABLESPACE SYSTEM,--list than
       PARTITION PA_ADD2 VALUES LESS THAN(MAXVALUE) TABLESPACE USERS
      )
CREATE TABLE MYDB
 (SID NUMBER(2) PRIMARY KEY,
      SNAME CHAR(5) NOT NULL,
      SPHONE NUMBER(11) NULL,
      SADDR VARCHAR2(10) DEFAULT '广东')
      PARTITION BY HASH (SID)--散列分区:根据字段的hash值进行均匀分布(hash)
      (PARTITION PA_ADD1 TABLESPACE SYSTEM,
       PARTITION PA_ADD2 TABLESPACE USERS
      ) 
      /**
      简写
      建议分区的数量采用2的n次方,这样可以使得各个分区间数据分布更加均匀。
      PARTITION BY HASH (SID) PARTITIONS 4(分区数) STORE IN (SP1,SP2,SP3,SP4); 
      **/ 
         
 CREATE TABLE MYDB
 (SID NUMBER(2) PRIMARY KEY,
      SNAME CHAR(5) NOT NULL,
      SPHONE NUMBER(11) NULL,
      SADDR VARCHAR2(10) DEFAULT '广东')
      PARTITION BY RANGE (SADRR) SUBPARTITION BY LIST (SID)--复合分区(范围+散列、范围+列表)
      (PARTITION PA_ID1 VALUES LESS THAN(100) TABLESPACE SP1
      (
         SUBPARTITIONS PA_ADRR1 VALUES('广东') TABLESPACE SP1,
         SUBPARTITIONS PA_ADRR2 VALUES('广西') TABLESPACE SP1
      )
       PARTITION PA_ID2 VALUES LESS THAN(MAXVALUE) TABLESPACE SP1
      (
         SUBPARTITIONS PA_ADRR3 VALUES('广东') TABLESPACE SP1,
         SUBPARTITIONS PA_ADRR4 VALUES('广西') TABLESPACE SP1
      )
      )     
      
      --拆分分区(sblit)
      alter table tb_name sblit partition p2 at () into (partition p11,partition p22);
      ALTER TABLE SALES SBLIT PARTITION P2 AT(TO_DATE('2003-02-01','YYYY-MM-DD')) INTO (PARTITION P21,PARTITION P22);
      --合并分区、MERGE(融入的意思)
      alter table tb_name merge partitions sp1,sp2 into partition sp2;
      ALTER TABLE TB_NAME MERGE PARTITIONS SP1,SP2 INTO PARTITION SP2;
      --接合分区(只用于散列分区中)(coalesca)
      alter table tb_name coalesca partitiion;
      ALTER TABLE SALES COALESCA PARTITION;
      --重名名分区(rename partition...to...)
      alter table tb_name rename partition sp1 to sp2;
      --查询某个表存在的分区信息
      select * from user_tab_partitions where table_name='tb_name';
      --使用union实现跨分区查询
      
      
      
      --alter table tab_name truncate partition p_name; 清除表中某个分区的信息(截断分区 )
      
      
      
      
      --練習
      --查看表分區信息
      select * from user_tab_partitions where table_name='stues';
      
      --班級表
      create table classes (
      cid number(6) primary key,
      cnum number(10) unique,
      cname varchar(10) not null,
      cmax_age number(2),
      cmin_age number(2),
      csex number(1) default 1--性別1女2男
      
      )
      partition by list(csex)(
      partition class_sex_l01 values(1) tablespace users,
      partition class_sex_l02 values(2) tablespace users
      )
      
      select * from classes partition(class_sex_l01);
      --學生表
      create table stues (
          sid number(6),
          snum number(10),
          sname varchar(10) not null,
          sage number(2),
          ssex number(1) default 1,
          scid number(6),
          constraint pk_con primary key(sid),
          constraint un_con unique(snum),
          constraint ck_age_con check (sage between 1 and 99),
          constraint ck_sex_con check (ssex between 1 and 2),
          constraint fk_con foreign key(scid) references classes(cid) 
          ) partition by range(sage)(
          partition class_age_r01 values less than(30) tablespace users,
          partition class_age_r02 values less than(60) tablespace users,
          partition class_age_r03 values less than(99) tablespace users
          )
          select * from stues partition(class_age_r02);
          
          select to_date(2454084+TRUNC(DBMS_RANDOM.VALUE(0,365)),'J') from dual;
          
          select cast('123' as number(5)) from dual;
          select cast(dbms_random.value as varchar2(38)) from dual;
          
          
        --根据区分表空间建表(例子)
       CREATE TABLE MYDB
       (SID NUMBER(2) PRIMARY KEY,
            SNAME CHAR(5) NOT NULL,
            SPHONE NUMBER(11) NULL,
            SADDR VARCHAR2(10) DEFAULT '广东')
            PARTITION BY LIST (SADDR)--列表分区
            (PARTITION PA_ADD1 VALUES ('广东') TABLESPACE SYSTEM,
             PARTITION PA_ADD2 VALUES ('广西') TABLESPACE USERS
            )
            
       ALTER TABLE MYDB 
             MODIFY (SNAME VARCHAR2(10) );     
       ALTER TABLE MYDB 
             MODIFY (SADDR DEFAULT '广东广州' );  
       ALTER TABLE MYDB
             MOVE TABLESPACE USERS;--移动表到其他表空间(索引会失效!)
      select * from user_tab_partitions where table_name='mydb'; --查看表的分區信息   
                
        
  









