也谈Oracle中删除用户下所有对象

因为要对数据库做换版,百度了以下Oracle中删除用户下所有对象的脚本并修改:

/* 保留owner */
BEGIN 
  FOR obj IN 
  (SELECT t.owner,t.object_name,object_type from all_OBJECTS t
 where t.owner in ('VENTURE',
                   'TOTAL',
                   'PARAMS',
                   'KSMANAGE',
                   'KINGSTAR',
                   'HISTORY',
                   'DCETL',
                   'CORE',
                   'CLOSING')
    and ( object_type='PROCEDURE' 
     OR object_type='TABLE' 
     OR object_type='VIEW' 
     OR object_type='FUNCTION' 
     OR object_type='PACKAGE'
     OR object_type='PACKAGE BODY'  
     OR object_type='SEQUENCE' )
    ) 
    LOOP 
        IF obj.object_type='TABLE' THEN 
           EXECUTE IMMEDIATE 'DROP '||obj.object_type||' '|| obj.owner||'.'||obj.object_NAME||' CASCADE CONSTRAINTS'; 
        ELSE 
           EXECUTE IMMEDIATE 'DROP '||obj.object_type||' '|| obj.owner||'.'||obj.object_NAME; 
        END IF; 
   END LOOP;     
END;

然后执行结果并不理想,看来脚本还需要继续做细节优化:

也谈Oracle中删除用户下所有对象

 清除所有用户的回收站:purge dba_recyclebin;

  dba_objects中的查询结果中,LOB类型变成了TYPE类型,记录依然存在。