create or replace procedure p_addpartition_job(i_date date)
-- Author : zbn
-- Created : 2013/10/28
-- Description : 每天定时任务创建分区
-- alter table t_yth_web_user_log_d add partition WEB_LOG_D_20131028 values('20131028');
as
v_sql varchar2(2000); -- 动态语句,执行创建表分区
par_exists Boolean := False; -- 判断分区是否存在
v_Partname varchar2(30); -- 分区名
v_Datepart varchar2(8); -- 截取入参或者系统时间作为分区名
v_tab_name varchar2(200); -- 临时变量,保存需要建分区的表名
cursor c_tab_name is select t.TABLE_NAME from user_tables t where t.TABLE_NAME like 'T_YTH%'; -- 定义一体化运营支撑游标
v_sqlerr varchar2(200); -- 错误信息编码
v_sqlmsg varchar2(200); -- 错误信息详情
begin
-- 检查是否有输入时间参数,如果没有,则取当前系统时间的yyyymmdd创建分区
if (i_date='' or i_date is null) then
v_Datepart := to_char(sysdate,'YYYYMMDD');
else
v_Datepart := to_char(i_date, 'YYYYMMDD');
end if;
-- 取分区名称
v_Partname := 'p_' || v_Datepart;
open c_tab_name;
fetch c_tab_name into v_tab_name;
while c_tab_name%found loop
par_exists := f_IsPartitionExist(v_tab_name,v_Partname);
--如果分区存在,则不做任何操作
if par_exists = true then
Null;
else
--如果表分区不存在, 则创建该表分区,分区名为WEB_LOG_D_YYYYMMDD,数据yyyymmdd
v_sql := 'alter table '||v_tab_name||' add partition p_'||v_Datepart||' values('||v_Datepart||')';
Execute Immediate v_Sql;
end if;
fetch c_tab_name into v_tab_name;
end loop;
close c_tab_name;
exception
when others then
v_sqlerr := sqlcode;
v_sqlmsg := substr(sqlerrm, 1, 200);
dbms_output.put_line(v_sqlerr||'@@@'||v_sqlmsg);
end p_addpartition_job;
-- Author : zbn
-- Created : 2013/10/28
-- Description : 每天定时任务创建分区
-- alter table t_yth_web_user_log_d add partition WEB_LOG_D_20131028 values('20131028');
as
v_sql varchar2(2000); -- 动态语句,执行创建表分区
par_exists Boolean := False; -- 判断分区是否存在
v_Partname varchar2(30); -- 分区名
v_Datepart varchar2(8); -- 截取入参或者系统时间作为分区名
v_tab_name varchar2(200); -- 临时变量,保存需要建分区的表名
cursor c_tab_name is select t.TABLE_NAME from user_tables t where t.TABLE_NAME like 'T_YTH%'; -- 定义一体化运营支撑游标
v_sqlerr varchar2(200); -- 错误信息编码
v_sqlmsg varchar2(200); -- 错误信息详情
begin
-- 检查是否有输入时间参数,如果没有,则取当前系统时间的yyyymmdd创建分区
if (i_date='' or i_date is null) then
v_Datepart := to_char(sysdate,'YYYYMMDD');
else
v_Datepart := to_char(i_date, 'YYYYMMDD');
end if;
-- 取分区名称
v_Partname := 'p_' || v_Datepart;
open c_tab_name;
fetch c_tab_name into v_tab_name;
while c_tab_name%found loop
par_exists := f_IsPartitionExist(v_tab_name,v_Partname);
--如果分区存在,则不做任何操作
if par_exists = true then
Null;
else
--如果表分区不存在, 则创建该表分区,分区名为WEB_LOG_D_YYYYMMDD,数据yyyymmdd
v_sql := 'alter table '||v_tab_name||' add partition p_'||v_Datepart||' values('||v_Datepart||')';
Execute Immediate v_Sql;
end if;
fetch c_tab_name into v_tab_name;
end loop;
close c_tab_name;
exception
when others then
v_sqlerr := sqlcode;
v_sqlmsg := substr(sqlerrm, 1, 200);
dbms_output.put_line(v_sqlerr||'@@@'||v_sqlmsg);
end p_addpartition_job;
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/12961536/viewspace-1061408/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/12961536/viewspace-1061408/