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

2014-11-24 15:01:37 · 作者: · 浏览: 0
--以下方法1,3本人试过,在sqlplus下最好用的删除,还原方法是:
002
--把删除表,写成脚本:
003
--************************
004
--**方法1
005
--************************
006
--在终端依次输入以下命令
007
sqlplus
008
--输入需要删除的用户名
009
--输入密码
010
SET HEAD OFF
011
SPOOL /tmp/database/drop_tables.sql
012

013
--chr(13) ASCII中=换行 chr(10) ASCII中=回车
014
--delete tables
015
select 'drop table ' || table_name ||';'||chr(13)||chr(10) from user_tables;
016
--delete views
017
select 'drop view ' || view_name||';'||chr(13)||chr(10) from user_views;
018

019

020
--delete seqs
021
select 'drop sequence ' || sequence_name||';'||chr(13)||chr(10) from user_sequences;
022

023

024
--delete functions
025
select 'drop function ' || object_name||';'||chr(13)||chr(10) from user_objects where object_type='FUNCTION';
026

027

028
--delete procedure
029
select 'drop procedure ' || object_name||';'||chr(13)||chr(10) from user_objects where object_type='PROCEDURE';
030

031

032
--delete package
033
select 'drop package ' || object_name||';'||chr(13)||chr(10) from user_objects where object_type='PACKAGE';
034

035
--delete trigger
036
SELECT 'drop TRIGGER "' ||SYS_CONTEXT('USERENV','CURRENT_USER')||'"."'|| TRIGGER_NAME ||'";' ||CHR(13) ||CHR(10)FROM USER_TRIGGERS
037

038

039
spool off;
040
@/tmp/database/drop_tables.sql;
041

042
purge recyclebin; --清空 Oracle的回收站
043

044
--例:(win下进行删除用户asus的所有表)
045
sqlplus
046
asus --用户名
047
asus --密码
048
SET HEAD OFF
049
SPOOL c:/drop_tables.sql --保存为sql语句
050

051
--chr(13) ASCII中=换行 chr(10) ASCII中=回车
052
--delete tables
053
select 'drop table ' || table_name ||';'||chr(13)||chr(10) from user_tables;
054
--delete views
055
select 'drop view ' || view_name||';'||chr(13)||chr(10) from user_views;
056
--delete seqs
057
select 'drop sequence ' || sequence_name||';'||chr(13)||chr(10) from user_sequences;
058
--delete functions
059
select 'drop function ' || object_name||';'||chr(13)||chr(10) from user_objects where object_type='FUNCTION';
060
--delete procedure
061
select 'drop procedure ' || object_name||';'||chr(13)||chr(10) from user_objects where object_type='PROCEDURE';
062
--delete package
063
select 'drop package ' || object_name||';'||chr(13)||chr(10) from user_objects where object_type='PACKAGE';
064
--delete trigger
065
SELECT 'drop TRIGGER "' ||SYS_CONTEXT('USERENV','CURRENT_USER')||'"."'|| TRIGGER_NAME ||'";' ||CHR(13) ||CHR(10)FROM USER_TRIGGERS
066

067
spool off;
068
@c:/drop_tables.sql;
069
purge recyclebin; --清空Oracle的回收站
070
quit --退出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
--************************
081
1 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_li