如何删除所有用户表?
我怎样才能删除所有的用户表?
我有约束的问题。 当我禁用所有它仍然是不可能的。
BEGIN FOR cur_rec IN (SELECT object_name, object_type FROM user_objects WHERE object_type IN ('TABLE', 'VIEW', 'PACKAGE', 'PROCEDURE', 'FUNCTION', 'SEQUENCE', 'SYNONYM', 'PACKAGE BODY' )) LOOP BEGIN IF cur_rec.object_type = 'TABLE' THEN EXECUTE IMMEDIATE 'DROP ' || cur_rec.object_type || ' "' || cur_rec.object_name || '" CASCADE CONSTRAINTS'; ELSE EXECUTE IMMEDIATE 'DROP ' || cur_rec.object_type || ' "' || cur_rec.object_name || '"'; END IF; EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.put_line ( 'FAILED: DROP ' || cur_rec.object_type || ' "' || cur_rec.object_name || '"' ); END; END LOOP; END; /
如果你只是想要一个非常简单的方法来做到这一点..这是我过去使用的脚本
select 'drop table '||table_name||' cascade constraints;' from user_tables;
这将为模式中的所有表格输出一系列放置命令。 假脱机查询的结果并执行它。
来源: https : //forums.oracle.com/forums/thread.jspa?threadID=614090
同样,如果您想清除多个表格,您可以编辑以下内容以满足您的需求
select 'drop '||object_type||' '|| object_name || ';' from user_objects where object_type in ('VIEW','PACKAGE','SEQUENCE', 'PROCEDURE', 'FUNCTION', 'INDEX')
另一个回答对我来说是( http://snipt.net/Fotinakis/drop-all-tables-and-constraints-within-an-oracle-schema/ )
BEGIN FOR c IN (SELECT table_name FROM user_tables) LOOP EXECUTE IMMEDIATE ('DROP TABLE "' || c.table_name || '" CASCADE CONSTRAINTS'); END LOOP; FOR s IN (SELECT sequence_name FROM user_sequences) LOOP EXECUTE IMMEDIATE ('DROP SEQUENCE ' || s.sequence_name); END LOOP; END;
请注意,运行后立即生效 。 它不会产生一个你需要粘贴的脚本(就像这里的其他答案一样)。 它直接在数据库上运行。
begin for i in (select 'drop table '||table_name||' cascade constraints' tbl from user_tables) loop execute immediate i.tbl; end loop; end;
最简单的方法是使用cascade命令删除拥有对象的用户。
DROP USER username CASCADE
最简单的方法是删除表空间,然后build立表空间备份。 但我宁愿不必这样做。 这和Henry的类似,不过我只是在我的gui中对结果集进行复制/粘贴。
SELECT 'DROP' ,object_type ,object_name ,CASE(object_type) WHEN 'TABLE' THEN 'CASCADE CONSTRAINTS;' ELSE ';' END FROM user_objects WHERE object_type IN ('TABLE','VIEW','PACKAGE','PROCEDURE','FUNCTION','SEQUENCE')