我如何动态地制作分区?

问题描述 投票:0回答:1

所以,我有这个分区,这使得一个错误,因为我在谷歌搜索它说,大多是像 "值大于分区"。

PARTITION BY LIST (BUSINESS_DATE)   
    (PARTITION D20200326 VALUES (TO_DATE('26/03/2020','DD/MM/YYYY'))    
        PCTFREE 10 INITRANS 1 MAXTRANS 255
        STORAGE ( BUFFER_POOL DEFAULT)
        TABLESPACE DWH LOGGING NOCOMPRESS)
GO

这是日期为'26032020'的分区,但我想让这个分区是动态的,所以我有这个ETL作业,如果ETL作业在'27032020'上运行,我的ETL作业就会出错,不想插入,所以我必须把这个分区改成27032020。

但我如何动态地做到这一点?

PARTITION BY LIST (INSERT_DATE) 
    (PARTITION D20200326 VALUES (TO_DATE(SYSDATE))  
        PCTFREE 10 INITRANS 1 MAXTRANS 255
        STORAGE ( BUFFER_POOL DEFAULT)
        TABLESPACE DWH LOGGING NOCOMPRESS)
GO

我试过改变SYSDATE,但只给了我一个错误。

ORA-14308:分区绑定的元素必须是:字符串、日期时间或间隔文字、数字或NULL中的一种 脚本第23行,语句第23行,第47列。

database oracle datastage
1个回答
1
投票

如果你需要自动创建day-wise partition,那么你可以使用 INTERVAL 分区,当插入的数据不属于以下任何一个分区时,将创建该分区。

CREATE TABLE YOUR_TABLE (
  ......
  created_date DATE
)
PARTITION BY RANGE (created_date)
INTERVAL (NUMTODSINTERVAL(1,'DAY'))
(
   PARTITION YT_PART_01 values LESS THAN (TO_DATE('02-JUN-2020','DD-MON-YYYY'))
);

如果你插入任何超过02-jun的数据,它将自动创建新的分区。

请参考 这个 有关该功能的文件。

© www.soinside.com 2019 - 2024. All rights reserved.