Oracle删除当前用户下的所有表、视图、序列、函数、存储过程、包

来源:互联网 发布:linux查看.zip内容 编辑:程序博客网 时间:2024/05/14 09:36
001--以下方法1,3本人试过,在sqlplus下最好用的删除,还原方法是:
002--把删除表,写成脚本:
003--************************
004--**方法1
005--************************
006--在终端依次输入以下命令
007sqlplus
008--输入需要删除的用户名
009--输入密码
010SET HEAD OFF
011SPOOL  /tmp/database/drop_tables.sql
012 
013--chr(13) ASCII中=换行  chr(10) ASCII中=回车
014--delete tables
015select 'drop table ' || table_name ||';'||chr(13)||chr(10) from user_tables;  
016--delete views
017select 'drop view ' || view_name||';'||chr(13)||chr(10) from user_views;  
018 
019 
020--delete seqs
021select 'drop sequence ' || sequence_name||';'||chr(13)||chr(10) from user_sequences; 
022 
023 
024--delete functions
025select 'drop function ' || object_name||';'||chr(13)||chr(10) from user_objects where object_type='FUNCTION';  
026 
027 
028--delete procedure
029select 'drop procedure ' || object_name||';'||chr(13)||chr(10) from user_objects where object_type='PROCEDURE';  
030 
031 
032--delete package
033select 'drop package ' || object_name||';'||chr(13)||chr(10) from user_objects where object_type='PACKAGE';  
034 
035--delete trigger
036SELECT 'drop TRIGGER "' ||SYS_CONTEXT('USERENV','CURRENT_USER')||'"."'|| TRIGGER_NAME ||'";' ||CHR(13) ||CHR(10)FROM USER_TRIGGERS
037 
038 
039spool off;
040@/tmp/database/drop_tables.sql;
041 
042purge recyclebin;   --清空Oracle的回收站
043 
044--例:(win下进行删除用户asus的所有表)
045sqlplus
046asus    --用户名
047asus    --密码
048SET HEAD OFF
049SPOOL  c:/drop_tables.sql --保存为sql语句
050 
051--chr(13) ASCII中=换行  chr(10) ASCII中=回车
052--delete tables
053select 'drop table ' || table_name ||';'||chr(13)||chr(10) from user_tables;
054--delete views
055select 'drop view ' || view_name||';'||chr(13)||chr(10) from user_views;  
056--delete seqs
057select 'drop sequence ' || sequence_name||';'||chr(13)||chr(10) from user_sequences; 
058--delete functions
059select 'drop function ' || object_name||';'||chr(13)||chr(10) from user_objects where object_type='FUNCTION';  
060--delete procedure
061select 'drop procedure ' || object_name||';'||chr(13)||chr(10) from user_objects where object_type='PROCEDURE';  
062--delete package
063select 'drop package ' || object_name||';'||chr(13)||chr(10) from user_objects where object_type='PACKAGE';  
064--delete trigger
065SELECT 'drop TRIGGER "' ||SYS_CONTEXT('USERENV','CURRENT_USER')||'"."'|| TRIGGER_NAME ||'";' ||CHR(13) ||CHR(10)FROM USER_TRIGGERS
066 
067spool off;
068@c:/drop_tables.sql;
069purge recyclebin;   --清空Oracle的回收站
070quit    --退出sqlplus
071 
072--完成
073 
074--然后再还原数据。
075--imp maximo/maximo@orcl fromuser=maximo touser=maximo file=21时14分34秒.dmp  tablespaces=tablespaces
076 
077 
078--************************
079--**方法2
080--************************
0811 select   Drop   table   ||table_name||;
082  from   all_tables
083  where   owner=要删除的用户名(注意要大写);
084  2、
085  删除所有表
086  以用户test为例
087  for example:
088  declare
089  cursor cur1 is select table_name from dba_tables where owner=TEST;
090  begin
091  for cur2 in cur1 loop
092  execute immediate drop table test.||cur2.table_name;
093  end loop;
094  end;
095  3、这个删除当前用户的所有对象(表、视图、触发器、存储过程、函数)
096  DECLARE
097  TYPE name_list IS TABLE OF VARCHAR2(40);
098  TYPE type_list IS TABLE OF VARCHAR2(20);
099  Tab_name name_list:=name_list();
100  Tab_type type_list:=type_list();
101  sql_str VARCHAR2(500);
102  BEGIN
103  sql_str := select uo.object_name,uo.object_type from user_objects uo where uo.object_type not in(INDEX,LOB) order by uo.object_type desc;
104  EXECUTE IMMEDIATE sql_str BULK COLLECT INTO tab_name,tab_type;
105  FOR IN Tab_name.FIRST.. Tab_name.LAST LOOP
106  sql_str := DROP || Tab_type(i) || || Tab_name(i);
107  EXECUTE IMMEDIATE sql_str;
108  END LOOP;
109  END;
110 
111 
112 
113--************************
114--**方法3
115--**使用Oracle SQL Developer
116--************************
117--用需要删除的用户登入
118--在工作表中输入以下内容