2011-03-10 1 views
0

Je dois sélectionner une date à partir du paramètre système pour lequel la partition doit être créée, puis créer la partition à l'aide d'une procédure stockée. TOUT guide. Oracle 11g est utilisé.Partition DB dans Ora 11g

Répondre

2

Vous pouvez utiliser quelque chose PL/SQL dynamique comme:

select the_date into l_date from system_parameters where...; 

execute immediate 'alter table mytable add partition p_' || replace(l_date,'-','') 
|| ' values less than (to_date(''' || l_date || ''',''DD-MON-YYYY'')'; 
3

Ronan,

peut-être que vous pouvez adopter le partitionnement par intervalles? Vous utilisez 11g pour que le partitionnement par intervalles vous soit disponible. Cela génère des partitions sur une base nécessaire, lorsque les données sont insérées et que la partition requise n'est pas encore disponible.

0

Je suis d'accord avec la réponse de @ik_zelf, si vous voulez mettre en place une partiion over date, et que vous voulez faire au fur et à mesure que la date arrive, allez à Partitionnement par intervalles. Il n'y aurait pas non plus besoin d'une procédure stockée.

C'est une nouvelle fonctionnalité de l'Oracle 11g. Ce qui crée la partiotion pour des intervalles particuliers lorsque les enregistrements sont insérés, donc vous n'avez pas besoin de vous inquiéter sur les nouvelles partitions. Les nouveaux Partiotions seraient donné un nom du système, ainsi que SYS_PXXX ..

Voici comment aller pour la partition d'intervalle ..

CREATE TABLE interval_tab (
    id   NUMBER, 
    code   VARCHAR2(10), 
    description VARCHAR2(50), 
    created_date DATE 
) 
PARTITION BY RANGE (created_date) 
INTERVAL(NUMTOYMINTERVAL(1,'MONTH')) -- change to 12 for an year 
(
    PARTITION part_01 values LESS THAN (TO_DATE('01-JAN-2012','DD-MON-YYYY')) 
); 

Partition Intervalle n'a rien à voir avec la partition précédente, la dernière partition créée avant l'intervalle serait le point de transition ici.

Vous pouvez aussi aller avec le pour ADD PARTITION et change rien

TABLE ..

Questions connexes