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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章