برای پارتیشن کردن یک جدول به این صورت که پارتیشن بندی اصلی آن به صورت ماهانه و subpartition آن به صورت روزانه باشد، باید یک Virtual Column به جدول اضافه شود تا بتوان subpartition بر اساس روز را بر اساس آن انجام داد.

 

CREATE TABLE TAB_PART_COMPOSITE_INTERVAL
(
  ID NUMBER(19,0), 
  TDATE TIMESTAMP (6) DEFAULT SYSTIMESTAMP, 
  TDAY NUMBER(2,0) GENERATED ALWAYS AS (EXTRACT(DAY FROM TDATE)) VIRTUAL
)
PARTITION BY RANGE (TDATE) INTERVAL (NUMTOYMINTERVAL(1,'MONTH'))
   SUBPARTITION BY LIST (TDAY)
   SUBPARTITION TEMPLATE
(
  SUBPARTITION P01 VALUES (1),
  SUBPARTITION P02 VALUES (2),
  SUBPARTITION P03 VALUES (3),
  SUBPARTITION P04 VALUES (4),
  SUBPARTITION P05 VALUES (5),
  SUBPARTITION P06 VALUES (6),
  SUBPARTITION P07 VALUES (7),
  SUBPARTITION P08 VALUES (8),
  SUBPARTITION P09 VALUES (9),
  SUBPARTITION P10 VALUES (10),
  SUBPARTITION P11 VALUES (11),
  SUBPARTITION P12 VALUES (12),
  SUBPARTITION P13 VALUES (13),
  SUBPARTITION P14 VALUES (14),
  SUBPARTITION P15 VALUES (15),
  SUBPARTITION P16 VALUES (16),
  SUBPARTITION P17 VALUES (17),
  SUBPARTITION P18 VALUES (18),
  SUBPARTITION P19 VALUES (19),
  SUBPARTITION P20 VALUES (20),
  SUBPARTITION P21 VALUES (21),
  SUBPARTITION P22 VALUES (22),
  SUBPARTITION P23 VALUES (23),
  SUBPARTITION P24 VALUES (24),
  SUBPARTITION P25 VALUES (25),
  SUBPARTITION P26 VALUES (26),
  SUBPARTITION P27 VALUES (27),
  SUBPARTITION P28 VALUES (28),
  SUBPARTITION P29 VALUES (29),
  SUBPARTITION P30 VALUES (30),
  SUBPARTITION P31 VALUES (31)
)
(  
  PARTITION TAB_PART_COMPOSITE_INTERVAL_P1

  VALUES LESS THAN (TO_DATE('2019-12-24','YYYY-MM-DD'))
);

 

بعد از پارتیشن کردن جدول ، یکی از روشهای کوئری زدن به صورتی که بتوان از این نوع پارتیشن استفاده کرد به صورت زیر است :

SELECT * 
  FROM TAB_PART_COMPOSITE_INTERVAL 
WHERE TO_CHAR(TDATE, 'YYYY-MM')='2019-12' 
    AND TDAY = 24;


مشخصات

آخرین ارسال ها

آخرین جستجو ها