create or replace procedure p_auto_add_part is
-- ********************************************************************************
-- 程序名称:
-- 功能描述: 可以做成job在每日凌晨启动,建立下一天的分区
-- 输入参数: para_table_name 分区表的名称
-- 输出参数: ret_code 0 :执行成功 1:分区名已经存在 2:其他原因导致失败
-- 输入资源:
-- 输出资源:
-- 中间资源:
-- 创建人员: ls
-- 创建日期: 2012-02-21
-- 版本说明: v1.0
-- 修改人员:
-- 修改日期:
-- 修改原因:
-- 版本说明:
-- 公司名称:
-- ********************************************************************************
l_part_cond varchar2(200); --时间条件
l_part_name varchar2(20); ---系统生成的分区名称
l_sql varchar2(2000); ---需要执行的sql
l_sql_range varchar2(2000); ---range分区是拼装的语句
is_exists number; ---判断该分区名是否已经存在
l_part_type varchar2(20); ---分区类型
ret_code number:=2;
begin
ret_code := 2;
----生成所需要的元素值
l_part_cond := to_char(sysdate + 2, 'yyyy-mm-dd');
l_part_name := 'p' || to_char(sysdate + 1, 'yyyymmdd');
----查询分区类型
l_sql_range := 'alter table t_location add partition ' ||
l_part_name || ' values less than (to_date(' || chr(39) ||
l_part_cond || chr(39) || ',' || chr(39) || 'yyyy-mm-dd' ||
chr(39) || '))';
l_sql := l_sql_range;
---判断生成的分区名在表上是否已经存在
select count(partition_name)
into is_exists
from user_tab_partitions
where table_name = upper('t_location')
and partition_name = l_part_name;
--dbms_output.put_line(l_sql);
--/*
if is_exists = 0 then
begin
execute immediate l_sql;
ret_code := 0;
exception
when others then
ret_code := 1;
end;
end if;
--*/
end;