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

来源:互联网 发布:flash编程语言 opencv 编辑:程序博客网 时间:2024/05/21 15:39

--以下方法1,3本人试过,在sqlplus下最好用的删除,还原方法是:

--把删除表,写成脚本:

--************************

--**方法1

--************************

--在终端依次输入以下命令

sqlplus

--输入需要删除的用户名

--输入密码

SET HEAD OFF

SPOOL  /tmp/database/drop_tables.sql

--chr(13) ASCII中=换行  chr(10) ASCII中=回车

--delete tables

select 'drop table ' || table_name ||';'||chr(13)||chr(10) from user_tables;

--delete views

select 'drop view ' || view_name||';'||chr(13)||chr(10) from user_views;


--delete seqs

select 'drop sequence ' || sequence_name||';'||chr(13)||chr(10) from user_sequences;

--delete functions

select 'drop function ' || object_name||';'||chr(13)||chr(10) from user_objects where object_type='FUNCTION';

--delete procedure

select 'drop procedure ' || object_name||';'||chr(13)||chr(10) from user_objects where object_type='PROCEDURE';


--delete package

select 'drop package ' || object_name||';'||chr(13)||chr(10) from user_objects where object_type='PACKAGE';

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

spool off;

@/tmp/database/drop_tables.sql;

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

--例:(win下进行删除用户asus的所有表)

sqlplus

asus    --用户名

asus    --密码

SET HEAD OFF

SPOOL  c:/drop_tables.sql --保存为sql语句

--chr(13) ASCII中=换行  chr(10) ASCII中=回车

--delete tables

select 'drop table ' || table_name ||';'||chr(13)||chr(10) from user_tables;

--delete views

select 'drop view ' || view_name||';'||chr(13)||chr(10) from user_views;

--delete seqs

select 'drop sequence ' || sequence_name||';'||chr(13)||chr(10) from user_sequences;

--delete functions

select 'drop function ' || object_name||';'||chr(13)||chr(10) from user_objects where object_type='FUNCTION';

--delete procedure

select 'drop procedure ' || object_name||';'||chr(13)||chr(10) from user_objects where object_type='PROCEDURE';

--delete package

select 'drop package ' || object_name||';'||chr(13)||chr(10) from user_objects where object_type='PACKAGE';

--delete trigger

SELECT 'drop TRIGGER "' ||SYS_CONTEXT('USERENV','CURRENT_USER')||'"."'|| TRIGGER_NAME ||'";' ||CHR(13) ||CHR(10)FROM USER_TRIGGERS

spool off;

@c:/drop_tables.sql;

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

quit    --退出sqlplus

--完成

--然后再还原数据。

--imp maximo/maximo@orcl fromuser=maximo touser=maximo file=21时14分34秒.dmp  tablespaces=tablespaces


--***********************
--**方法2
--************************

1 select   Drop   table   ||table_name||;

  from   all_tables
  where   owner=要删除的用户名(注意要大写);
  2、
  删除所有表
  以用户test为例
  for example:
  declare
  cursor cur1 is select table_name from dba_tables where owner=TEST;
  begin
  for cur2 in cur1 loop
  execute immediate drop table test.||cur2.table_name;
  end loop;
  end;
  3、这个删除当前用户的所有对象(表、视图、触发器、存储过程、函数)
  DECLARE
  TYPE name_list IS TABLE OF VARCHAR2(40);
  TYPE type_list IS TABLE OF VARCHAR2(20);
  Tab_name name_list:=name_list();
  Tab_type type_list:=type_list();
  sql_str VARCHAR2(500);
  BEGIN
  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;
  EXECUTE IMMEDIATE sql_str BULK COLLECT INTO tab_name,tab_type;
  FOR i IN Tab_name.FIRST.. Tab_name.LAST LOOP
  sql_str := DROP || Tab_type(i) || || Tab_name(i);
  EXECUTE IMMEDIATE sql_str;
  END LOOP;
  END;


 

原创粉丝点击