您可以安排作业在适当的时候添加这些分区。由于这是一个 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;
/
通常,所有类似的函数调用,如上述(每日、每月和每年)都将放在一个包中,并将 table_name 作为输入。这些是根据需要从各个过程中调用的。