Oracle: 删除当前用户的所有对象(表、视图、存储过程、包、javasource,job)

Oracle: 删除当前用户的所有对象(表、视图、存储过程、包、javasource,job)

by yanleigis email:landgis@126.com

说明:该函数在oracle10g专用,使用前要备份数据,数据删除后,数据不能恢复,一定要小心,小心,小心谨慎。

create or replace package pack_deleteall is
  procedure deleteall;
end pack_deleteall;

 

create or replace package body pack_deleteall is
  procedure deletetable is
    --删除表和视图oracle10g专用 by yanleigis email:landgis@126.com
 
    cursor c1 is
      select t.tabtype, t.tname from tab t;
    sqlstr varchar2(1024);
 
  begin
    for rr in c1 LOOP
      begin
        sqlstr := 'drop  ' || rr.tabtype || ' ' || rr.tname;
        if rr.tabtype = 'TABLE' then
          sqlstr := sqlstr || ' purge';
        end if;
        execute immediate sqlstr;
      exception
        when others then
          begin
            sqlstr := 'drop  ' || rr.tabtype || ' ' || rr.tname ||
                      ' cascade constraints';
            execute immediate sqlstr;
          exception
            when others then
              begin
                sqlstr := 'drop  ' || rr.tabtype || ' "' || rr.tname ||
                          '" cascade constraints'; --加"
                execute immediate sqlstr;
              exception
                when others then
                  dbms_output.put_line(sqlstr || sqlcode || ':' || sqlerrm);
              end;
          end;
      end;
    END LOOP;
 
  end;
  procedure deletesource is
    --删除存储过程,包,java source等等oracle10g专用 by yanleigis email:landgis@126.com
    cursor c1 is
      select b.object_type, b.object_name
        from user_objects b
       where b.object_type != 'PACKAGE BODY'
         and b.object_name != upper('pack_deleteall');
    sqlstr varchar2(1024);
  begin
    for rr in c1 LOOP
      begin
        sqlstr := 'drop ' || rr.object_type || ' ' || rr.object_name;
        execute immediate sqlstr;
      exception
        when others then
          begin
            sqlstr := 'drop ' || rr.object_type || ' "' || rr.object_name || '"'; --创建时加'"
            execute immediate sqlstr;
          exception
            when others then
              dbms_output.put_line(sqlstr || sqlcode || ':' || sqlerrm);
          end;
      end;
    end loop;
  end;
  procedure deletejob is
    ---删除存jjob oracle10g专用 by yanleigis email:landgis@126.com
    cursor c1 is
      select b.JOB from user_jobs b;
 
  begin
    for rr in c1 LOOP
      begin
        dbms_job.remove(rr.job);
     
      exception
        when others then
          dbms_output.put_line(sqlcode || ':' || sqlerrm);
      end;
    end loop;
  end;
  --删除procedure 
  procedure deleteall is
  begin
    deletetable;
    deletesource;
    deletejob;
    commit;
    execute immediate 'purge recyclebin';
 
  end;

end pack_deleteall;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值