2

J'ai une table Oracle:Comment partitionner une table Oracle par une colonne de date?

CREATE TABLE transaction (
    id INT NOT NULL, 
    accountnumber VARCHAR NOT NULL, 
    stmtvaluedate DATE NOT NULL, 
    ... 
) 

Et je veux diviser ce tableau par la colonne stmtvaluedate. Mon but est de créer une nouvelle partition après un mois passé.

Y at-il un bon script, pour cela? Ou je dois créer des nombres statiques de partitions? Le meilleur serait: si un mois s'est écoulé, une nouvelle partition sera créée automatiquement.

Quelqu'un peut-il me donner un exemple sur la façon de partitionner une table par une colonne de date après chaque mois? Si le partitionnement automatique est impossible, alors j'aurais besoin d'un exemple, qui crée des partitions pour un an à partir d'aujourd'hui par une colonne de date, environ tous les mois.

Merci!

+0

[ce] (http://docs.oracle.com/cd/E18283_01/server.112/e16541/part_admin001.htm#BAJHFFBE) pourrait aider. Vous pouvez utiliser la table Interval-Partitioned. Mais cela ne fonctionne que pour Oracle 11.1 et supérieur – Tatiana

+0

Merci. Et puis-je partitionner par ** semaine ** ou ** jour ** aussi? – victorio

Répondre

7

Ce que vous voulez faire est complètement possible. Cela devrait le faire:

CREATE TABLE transaction (
    id INT NOT NULL, 
    accountnumber VARCHAR2(30) NOT NULL, 
    stmtvaluedate DATE NOT NULL 
) 
PARTITION BY RANGE (stmtvaluedate) 
INTERVAL (NUMTOYMINTERVAL (1,'MONTH')) 
    (partition transaction_old values less than (to_date('01-JAN-2000','DD-MON-YYYY'))); 
+0

Et si je veux partitionner une table non par mois, mais par une semaine ou un jour? Sont-ils rigth ?: ** INTERVALLE (NUMTOYMINTERVAL (1, 'semaine')) ** ou ** INTERVALLE (NUMTOYMINTERVAL (1, 'JOUR')) ** Et quelle sera la date clause 01-JAN -2000? Cela signifie-t-il que si une valeur * stmtvaluedate * est inférieure à 2000.01.01, cette ligne ira dans la partition? – victorio

+1

Utilisez 'NUMTODSINTERVAL' pour les jours et les semaines. Et oui, la clause 1/1/2000 est de dire à Oracle de mettre toutes les données avant une date donnée dans une seule partition. Si vous avez beaucoup de données historiques, cette date peut ne pas convenir. –

+0

parfait, merci! – victorio