Oracle创建按时间戳分区表

本文介绍如何在Oracle中创建范围分区表,并通过存储过程实现对新增分区的自动重命名,最后设置定时任务定期调用该存储过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 建分区表

-- Create table
create table PARTITION_TABLE
(
  field1   INTEGER,
  field2   VARCHAR2(32),
  field3   INTEGER,
)
partition by range(field3)
interval (86400)
(partition p1 values less than (1431964800) ) nologging
tablespace user;
);


2 增加存储过程对扩展的分区改名

CREATE OR REPLACE PROCEDURE PRO_RENAME_PARTITION AS
  SQLSTR VARCHAR2(4000);
  val2 int;
  newpart varchar2(32);
BEGIN
  for REC in (select table_name
                from user_tables
               where table_name like 'PARTITION_%') loop
    for x in (select high_value, partition_name
                from user_tab_partitions
               where table_name = REC.TABLE_NAME
                 and partition_name not like 'PART_201%') loop
      val2    := to_number(x.high_value);
      newpart := 'PART_' ||
                 to_char(to_date('19700101080000', 'yyyymmddhh24miss') +
                         (val2 - 3600) / 86400,
                         'yyyymmdd');
      sqlstr  := 'alter table ' || REC.TABLE_NAME || ' rename partition ' ||
                 x.partition_name || ' to ' || newpart;
      begin
        execute immediate sqlStr;
      exception
        when others then
          null;
      end;
    end loop;
  end loop;
END PRO_RENAME_PARTITION;


3 增加job定时调用存储过程

/
begin 
dbms_scheduler.create_job 
( 
job_name => 'job_pro_rename_partition', 
job_type => 'PLSQL_BLOCK', 
job_action => 'begin PRO_RENAME_PARTITION ; end;',
repeat_interval => 'FREQ=DAILY;BYHOUR=1;byminute=0', 
enabled => true
); 
end; 
/





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值