带时间戳的自动分区

时间:2013-10-30 08:23:18

标签: oracle oracle11g partitioning

我想每天对我的表(Oracle)进行自动分区。

我只有一个时间戳列:

 DD.MM.YYYY HH24:MI:SS

到目前为止,我发现了这一点,但它无效:

create table 
pos_data ( 
    start_date        DATE,
    store_id          NUMBER,
    inventory_id      NUMBER(6),
    qty_sold          NUMBER(3),
 ) 
 PARTITION BY RANGE (start_date) 
 INTERVAL(NUMTOYMINTERVAL(1, 'MONTH')) 
 (  
  PARTITION pos_data_p2 VALUES LESS THAN (TO_DATE('1-7-2007', 'DD-MM-YYYY')),
  PARTITION pos_data_p3 VALUES LESS THAN (TO_DATE('1-8-2007', 'DD-MM-YYYY')) 
 ); 

通过这个例子,我得到了无效的标识符错误......我不知道时间戳是否会对日期列产生影响。

答案:

create table 
pos_data_two ( 
    start_date        TIMESTAMP,
    store_id          NUMBER,
    inventory_id      NUMBER(6),
    qty_sold          NUMBER(3)
 ) 
 PARTITION BY RANGE (start_date) 
 INTERVAL(NUMTODSINTERVAL (1, 'DAY')) 
 (  
  PARTITION pos_data_p2 VALUES LESS THAN (TO_DATE('1-7-2007', 'DD-MM-YYYY')),
  PARTITION pos_data_p3 VALUES LESS THAN (TO_DATE('1-8-2007', 'DD-MM-YYYY')) 
 ); 

2 个答案:

答案 0 :(得分:3)

这是因为你在,之后错误地放置qty_sold NUMBER(3),删除它并尝试这样做,

create table 
pos_data ( 
    start_date        DATE,
    store_id          NUMBER,
    inventory_id      NUMBER(6),
    qty_sold          NUMBER(3)
 ) 
 PARTITION BY RANGE (start_date) 
 INTERVAL(NUMTOYMINTERVAL(1, 'MONTH')) 
 (  
  PARTITION pos_data_p2 VALUES LESS THAN (TO_DATE('1-7-2007', 'DD-MM-YYYY')),
  PARTITION pos_data_p3 VALUES LESS THAN (TO_DATE('1-8-2007', 'DD-MM-YYYY')) 
 ); 

答案 1 :(得分:1)

您有多个逗号(在qty_sold列定义之后):

create table 
pos_data ( 
    start_date        DATE,
    store_id          NUMBER,
    inventory_id      NUMBER(6),
    qty_sold          NUMBER(3)
 ) 
 PARTITION BY RANGE (start_date) 
 INTERVAL(NUMTOYMINTERVAL(1, 'MONTH')) 
 (  
  PARTITION pos_data_p2 VALUES LESS THAN (TO_DATE('1-7-2007', 'DD-MM-YYYY')),
  PARTITION pos_data_p3 VALUES LESS THAN (TO_DATE('1-8-2007', 'DD-MM-YYYY')) 
 );