oracle 自动分区+修改分区名称函数+定时修改区名
踩坑记录
代码:
**根据数据的时间自动创建分区(每月1号)
CREATE TABLE FU_SHIYAN
(
ID VARCHAR2(36) ,
APP_ID VARCHAR2(50) ,
INSTITUTION_UUID VARCHAR2(50) ,
GB_INDEX_ID VARCHAR2(50) ,
RESIDENT_ID VARCHAR2(50) ,
IMAGE_ID VARCHAR2(1000),
TYPE VARCHAR2(50) ,
STATUS VARCHAR2(50) ,
UPDATE_TIME DATE
) PARTITION BY RANGE (UPDATE_TIME) INTERVAL (numtoyminterval(1, ‘month’))
(partition p_202103 values less than(to_date(‘2021-03-01’, ‘yyyy-mm-dd’)));
查询分区语句**
select * from user_tab_partitions where table_name=‘FU_SHIYAN’;
查询分区表里的数据:
select * from FU_SHIYAN partition(P_202106);
想要上面格式的分区名需要写函数:
函数代码:
CREATE OR REPLACE
procedure pro_partition
as
v_sql varchar(400);
v_table_name user_tab_partitions.table_name%type;
v_partition_name user_tab_partitions.partition_name%type;
v_high_value varchar(200);
v_tmp_partition_name user_tab_partitions.partition_name%type;
cursor cur1 is
select
table_name ,
partition_name ,
high_value
from user_tab_partitions
where partition_name like ‘SYS%’ and table_name=‘FU_SHIYAN’;
begin
open cur1;
loop
fetch cur1 into v_table_name,v_partition_name,v_high_value;
exit when cur1%notfound;
v_tmp_partition_name := substr(v_high_value,11,10);
v_tmp_partition_name := to_char( to_date(v_tmp_partition_name,‘yyyy-mm-dd’) , ‘yyyymm’);
v_sql := ‘alter table ‘||v_table_name||’ rename partition ’
||v_partition_name
||’ to P_’||v_tmp_partition_name;
execute immediate v_sql;
end loop;
close cur1;
end;
这样会把所有自动生成的SYS开头的区名称全部替换成自己想要的时间格式
可以点击运行测试哦
现在设置自动更换区名称
登录PLSQL****右键新建
这样会每分钟执行一次这个函数去把区名称改成自己想要的格式哦
时间想变可以参考