Create Daily Partitions
CREATE TABLE edw.sales_tran_201501
(sales_tran_id       NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY,
 sales_date          DATE,
 sales_qty           NUMBER,
 sales_amt           NUMBER(25,2)
)
 PARTITION BY RANGE (sales_date)
 (PARTITION ST_20150101 VALUES LESS THAN TO_DATE(20150102,'yyyymmdd') 
);

-- 201501 (Jan-2015 setup):
-- Create a dynamic daily date range time partition script
-- The value to be passed for &yyyymm is 201501
-- Since first value is created, add day 2 to 31 in this example

SELECT
 'ALTER TABLE edw.sales_tran_'||month_id||' ADD PARTITION ST_'||
  TO_CHAR(cal_day,'yyyymmdd')||' VALUES LESS THAN TO_DATE('||
  TO_CHAR(cal_day+1,'yyyymmdd')||'''yyyymmdd'''||','||
  '''NLS_CALENDAR=GREGORIAN'''||
  ')) COMPRESS;'                  ddl_str
FROM
 (SELECT
    level  idx,
    qt.month_id,
    TO_DATE(qt.month_id,'yyyymm')+level-1  cal_day
  FROM DUAL,
   (SELECT  &yyyymm month_id FROM DUAL)
  CONNECT BY level <= TO_CHAR(LAST_DAY(TO_DATE(qt.month_id,'yyyymm')),'dd')
 )
WHERE idx > 1;

-- In range partition, if a later date partition exists with a gap in date, 
-- (e.g. Jan-5th and Jan-7th) middle value of Jan-6th cannot inserted.  It will 
-- result in ORA-14074 error.

-- Script based on SYSDATE

SELECT
 'ALTER TABLE edw.sales_tran_'||month_id||' ADD PARTITION ST_'||
  TO_CHAR(calendar_day,'yyyymmdd')||' VALUES LESS THAN TO_DATE('||
  TO_CHAR(calendar_day+1,'yyyymmdd')||'''yyyymmdd'''||','||
  '''NLS_CALENDAR=GREGORIAN'''||
  ')) COMPRESS;'              ddl_str
FROM
(SELECT
   level  idx,
   month_id,
   TO_DATE(qt.month_id,'yyyymm')+level-1 calendar_day
 FROM DUAL,
       (SELECT TO_CHAR(SYSDATE,'yyyymm') month_id FROM DUAL) qt
 CONNECT BY level <= TO_CHAR(LAST_DAY(SYSDATE),'DD')
)
WHERE  idx > 1
;

-- Get details of the partitions for all tables for a owner/schema
SELECT * FROM all_tab_partitions
WHERE owner = NVL(UPPER('&p_owner'),user);

-- Get data in a specific partition (e.g. ST_20150101)
SELECT * FROM sales_tran_201501 PARTITION(ST_20150101)
;

   Database Size    Tablespace Queries    Partition Count

   Oracle-12c

Oracle registered trademark of Oracle Corporation.

Last Revised On: January 12th, 2020

  55791