Oracle存儲過程
--刪除三個月前的表
create or replace procedure drop_old_table(tables_name varchar2) is
v_newTableName varchar2(50);
v_createSql varchar2(200);
begin
for k in 1..to_number(to_char(last_day(add_months(sysdate,-3)),'dd')) loop
v_newTableName := upper(tables_name||trim(to_char(add_months(sysdate,1),'MM'))||trim(to_char(k,'00')));
v_createSql := 'drop table '||v_newTableName;
if length(v_createSql) > 0 then
drop_mytable(v_newTableName);
end if;
end loop;
end;
--創建下個月要用的表
create or replace procedure createOneMonthTable(tables_name varchar2,) is
v_newTableName varchar2(50);
v_oldTableName varchar2(50);
v_createSql varchar2(200);
table_num number(2);
begin
for k in 1..to_number(to_char(last_day(add_months(sysdate,1)),'dd')) loop
v_newTableName := upper(tables_name||trim(to_char(add_months(sysdate,1),'MM'))||trim(to_char(k,'00')));
v_oldTableName := upper(tables_name||to_char(sysdate,'MM')||to_char(last_day(sysdate),'dd'));
v_createSql := 'create table '||v_newTableName||' as select * from '||v_oldTableName||' where 1=2';
select count(*) into table_num from user_tables where table_name = upper(v_newTableName);
if length(v_createSql) > 0 and table_num <=0 then
execute immediate ''||v_createSql||'';
end if;
end loop;
end;
--創建安裝時需要創建的所有chr表
create or replace procedure createCurrentMonthTable(tables_name varchar2,old_tables_name varchar2) is
v_newTableName varchar2(50);
v_oldTableName varchar2(50);
v_createSql varchar2(200);
table_num number(2);
begin_num number(2);
end_num number(2);
begin
begin_num := to_number(to_char(sysdate,'dd'));
end_num := to_number(to_char(last_day(sysdate),'dd'));
for k in begin_num..end_num loop
v_newTableName := upper(tables_name||trim(to_char(sysdate,'MM'))||trim(to_char(k,'00')));
v_oldTableName := upper(old_tables_name);
v_createSql := 'create table '||v_newTableName||' as select * from '||v_oldTableName||' where 1=2';
select count(*) into table_num from user_tables where table_name = upper(v_newTableName);
if length(v_createSql) > 0 and table_num <=0 then
execute immediate ''||v_createSql||'';
end if;
end loop;
end;
SIMPLIFIED CHINESE_CHINA.ZHS16GBK
AMERICAN_AMERICA.AL32UTF8
create or replace procedure drop_old_table(tables_name varchar2) is
v_newTableName varchar2(50);
v_createSql varchar2(200);
begin
for k in 1..to_number(to_char(last_day(add_months(sysdate,-3)),'dd')) loop
v_newTableName := upper(tables_name||trim(to_char(add_months(sysdate,1),'MM'))||trim(to_char(k,'00')));
v_createSql := 'drop table '||v_newTableName;
if length(v_createSql) > 0 then
drop_mytable(v_newTableName);
end if;
end loop;
end;
--創建下個月要用的表
create or replace procedure createOneMonthTable(tables_name varchar2,) is
v_newTableName varchar2(50);
v_oldTableName varchar2(50);
v_createSql varchar2(200);
table_num number(2);
begin
for k in 1..to_number(to_char(last_day(add_months(sysdate,1)),'dd')) loop
v_newTableName := upper(tables_name||trim(to_char(add_months(sysdate,1),'MM'))||trim(to_char(k,'00')));
v_oldTableName := upper(tables_name||to_char(sysdate,'MM')||to_char(last_day(sysdate),'dd'));
v_createSql := 'create table '||v_newTableName||' as select * from '||v_oldTableName||' where 1=2';
select count(*) into table_num from user_tables where table_name = upper(v_newTableName);
if length(v_createSql) > 0 and table_num <=0 then
execute immediate ''||v_createSql||'';
end if;
end loop;
end;
--創建安裝時需要創建的所有chr表
create or replace procedure createCurrentMonthTable(tables_name varchar2,old_tables_name varchar2) is
v_newTableName varchar2(50);
v_oldTableName varchar2(50);
v_createSql varchar2(200);
table_num number(2);
begin_num number(2);
end_num number(2);
begin
begin_num := to_number(to_char(sysdate,'dd'));
end_num := to_number(to_char(last_day(sysdate),'dd'));
for k in begin_num..end_num loop
v_newTableName := upper(tables_name||trim(to_char(sysdate,'MM'))||trim(to_char(k,'00')));
v_oldTableName := upper(old_tables_name);
v_createSql := 'create table '||v_newTableName||' as select * from '||v_oldTableName||' where 1=2';
select count(*) into table_num from user_tables where table_name = upper(v_newTableName);
if length(v_createSql) > 0 and table_num <=0 then
execute immediate ''||v_createSql||'';
end if;
end loop;
end;
SIMPLIFIED CHINESE_CHINA.ZHS16GBK
AMERICAN_AMERICA.AL32UTF8
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.