sql >> Databáze >  >> RDS >> Oracle

Mám tabulku rozdělit/pododdílit?

Můžete to zkusit tímto způsobem:pomocí INTERVALu řekněte oracle, aby vytvořil automatické oddíly. Musíte definovat sloupec (číslo nebo datum) a interval (v mém příkladu 1 měsíc). Oracle umístí do stejného oddílu všechny řádky ve stejném intervalu (v tomto případě ve stejném měsíci). Pokud oddíl neexistuje, bude vytvořen.

create table log(
       id_dispositive    number,
       date    date,
       status  number,
       type    number
)
partition by range (date)                              
interval (numtoyminterval(1,'MONTH'))(
   partition p0701 values less than (to_date('2007-02-01','yyyy-mm-dd'))
);

Totéž lze provést is typem sloupce. Další informace:http://www.oracle.com/ technetwork/articles/sql/11g-partitioning-084209.html .

Každý oddíl lze rozdělit pomocí klíče TEMPLATE.

create table log(
       id_dispositive    number,
       date    date,
       status  number,
       type    number
)
partition by range (date) interval (numtoyminterval(1,'MONTH'))
subpartition by list (type)  
subpartition TEMPLATE (
    SUBPARTITION types1 VALUES (1, 2) TABLESPACE tbs_1,
    SUBPARTITION types2 VALUES (3, 4) TABLESPACE tbs_1
)                          
(
   partition p0701 values less than (to_date('2007-02-01','yyyy-mm-dd'))
);

V tomto případě nemůžete vytvořit automatický pododdíl, pokud bude přidán nový typ, musíte spustit příkaz změnit tabulku. Zde více informací; https://docs.oracle.com/cd /B28359_01/server.111/b32024/part_admin.htm#i1006655 .

Ve vašem příkladu:

create table prova_log(
       id_dispositive    number,
       type       number,
       date_verification    date,
       status  number
)
partition by range (date_verification) interval (numtoyminterval(1,'MONTH'))
subpartition by list (type)  
subpartition TEMPLATE (
    SUBPARTITION type1 VALUES (1),
    SUBPARTITION type2 VALUES (2),
    SUBPARTITION type3 VALUES (3),
    SUBPARTITION type4 VALUES (4)
)                          
(
   partition p0816 values less than (to_date('01/09/2016','dd/mm/yyyy'))
);

Pokud se pokusíte vložit:

insert into prova_log values (1,1,TO_DATE('10/10/2016','dd/mm/yyyy'),1);

na vašem stole uvidíte 2 oddíly.

Teď jsem to otestoval!




  1. Výchozí hodnota pro parametry nebyla předána skriptu SQLPlus

  2. Spusťte příkaz mysql create function pomocí PHP

  3. V aplikaci mám přístup k ovladači JDBC (výjimka java.lang.ClassNotFoundException:com.mysql.cj.jdbc.Driver)

  4. problémy se znakovými sadami při tisku textu z tabulky db