Oracle10g Oracle 10g范围分区,间隔为1个月

Oracle10g Oracle 10g范围分区,间隔为1个月,oracle10g,Oracle10g,我想用10g中间隔1个月的范围分区对txn表进行分区。具有txn_日期的表 我希望分区是自动的。 我认为这在11中是可能的,但在10g中是否有任何方法可以实现 create table part ( txn_Date date ) PARTITION BY RANGE (txn_date) INTERVAL (NUMTOYMINTERVAL(1,'MONTH')) ( partition p1 values less than (TO_DATE('01-NOV-2007','DD-M

我想用10g中间隔1个月的范围分区对txn表进行分区。具有txn_日期的表

我希望分区是自动的。 我认为这在11中是可能的,但在10g中是否有任何方法可以实现

create table part
(
   txn_Date date
)
PARTITION BY RANGE (txn_date)
INTERVAL (NUMTOYMINTERVAL(1,'MONTH'))
(
   partition p1 values less than (TO_DATE('01-NOV-2007','DD-MON-YYYY'))
);

您可以在适当的时候安排一个作业来添加这些分区。因为这是一个DDL,所以可以使用动态SQL来完成

例如,对于保存按月分区的数据的表,您可以在每个月的最后一个周末有一个作业,该作业将创建下个月的巴黎

create or replace procedure p_part_maintenance_mnthy
as
declare
  v_partition_name all_tab_partitions.partition_name%type;
  v_limit varchar2(50);
begin

  select to_char(trunc(add_months(sysdate,1),'MM'),'MonYYYY')
    into v_partition_name 
    from dual; --eg. output Oct2012

  select to_char(trunc(add_months(sysdate,2),'MM'),'dd-mon-yyyy')
    into v_limit
    from dual; -- eg. output 01-nov-2012

execute immediate 'ALTER TABLE sales ADD PARTITION ' || v_partition_name ||
                   ' VALUES LESS THAN (' || v_limit || ') tablespace XYZ';

end;
/

通常,所有类似的函数调用(每日、每月和每年)都在一个包中,并将表_名称作为输入。必要时,可从各个程序调用这些问题。

问题和答案都对日期格式或语言进行了假设。我强烈建议您始终使用ANSI日期文字,如日期“2007-11-01”。